如何从php启动停止perl守护进程

时间:2012-12-05 16:18:47

标签: php perl daemon

我需要从Web应用程序(php)控制(start \ stop \ restart)perl守护程序。 当我从命令行使用我的初始化脚本(/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        
}   

1 个答案:

答案 0 :(得分: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 $!`

它有效...对不起......