我一直在关注run a perl script as a daemon中的解释。我想在perl脚本中创建pid_file
。在完成文档后,我确信以下代码可以执行此操作:
use Proc::Daemon;
Proc::Daemon::Init({ pid_file => "/var/run/theprocess.pid"} );
长话短说。我没有用。我也试过Proc::Daemon->new()
运算符,它也没用。我能错过什么?
答案 0 :(得分:1)
不知道任何细节很难说,但很可能是两件事之一:
pid_file
不支持完整路径。考虑到POD示例涉及单独的work_dir
参数和无路径pid_file
值,这是不太可能的,但可能是这样:
my $daemon = Proc::Daemon->new(
work_dir => '/working/daemon/directory',
pid_file => 'pid.txt',
exec_command => 'perl /home/my_script.pl',
);
基于模块中的当前代码并非如此(例如,示例仅显示没有完整路径的有效用法,但这种用法很好);但它可能是旧版模块中缺少的新功能。再一次,不太可能。
或者,无法创建您要写入的文件,原因是该目录丢失或由于权限问题。如果是这种情况,STDERR上应该有一些东西看起来像“*无法打开pid_file xxxx *”。与FYI一样,文件以读写模式打开(+>
)。
答案 1 :(得分:1)
实际上问题是安装Proc :: Daemon :: Init的debian软件包是针对版本0.3的,它没有创建pid文件的功能。我最终做了类似的事情:
use Proc::Daemon;
use Proc::PID::File;
Proc::Daemon::Init();
if (Proc::PID::File->running()) {
exit;
}