我需要从web应用程序(php)控制(启动\停止\重新启动)一个perl守护进程。当我从命令行使用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
} 发布于 2012-12-06 00:40:53
解决..。我的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 $!`然后它works...Sorry..。
https://stackoverflow.com/questions/13727639
复制相似问题