我需要从 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
}