我需要从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
}
答案 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 $!`
它有效...对不起......