使用Proc :: Daemon :: Init时创建pid_file

时间:2011-10-01 00:07:32

标签: perl daemon

我一直在关注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()运算符,它也没用。我能错过什么?

2 个答案:

答案 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;
}