4

Webアプリケーション(php)からperlデーモンを制御(start \ stop \ restart)する必要があります。コマンドラインからinitスクリプト(/etc/init.d/foodaemon start(正常に動作))を使用すると、デーモンが正しく起動(および実行)されますが、動作しません(デーモンはダウンしていますが、pidファイルが作成されます。アプリケーションから起動しようとすると、デーモンが作成後に終了しました)。/ etc/sudoersに追加しました

apache  ALL = NOPASSWD: /etc/init.d/foodaemon

私のphpスクリプトでは、

$cmd = "/usr/bin/sudo /etc/init.d/foodaemon start";                             
exec($cmd,$out,$ret);

私はすべての権限を持っています。perlスクリプトは

#!/usr/bin/perl
use strict;
use warnings;
use Proc::Daemon;
Proc::Daemon::Init;

my $continue = 1;
$SIG{TERM} = sub { $continue = 0 };

close STDIN;
open STDERR,">>/tmp/mylog";
print "My pid: $$\n";
close STDOUT;

while ($continue) {

        # ... what I need        
}   
4

1 に答える 1

1

解決済み...init.dスクリプトにエラーがありました。

case "$1" in
    start)
        if [ -z "$(pgrep $DAEMON)" ]
        then

            # DAEMON is not running                         
            printf "%-50s" "Starting $NAME..."

            cd $DAEMON_PATH
            PID=`$DAEMON > /dev/null 2>&1 & echo $!`

            #echo "Saving PID" $PID " to " $PIDFILE
            if [ -z $PID ]; then
                printf "%s\n" "Fail"

私には許可がありませんでした

cd $DAEMON_PATH

だから、私は次のように更新します

 #cd $DAEMON_PATH
 PID=`$DAEMON_PATH/$DAEMON > /dev/null 2>&1 & echo $!`

そしてそれは動作します...ごめんなさい...

于 2012-12-05T16:40:52.630 に答える