4

我需要从 Web 应用程序 (php) 控制 (start\stop\restart) perl 守护进程。当我从命令行使用我的初始化脚本 (/etc/init.d/foodaemon start (works fine)) 时,守护程序正确启动(并运行),但不起作用(守护程序已关闭但创建了 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 回答