2011-10-01 62 views
3

我一直在关注run a perl script as a daemon中的解释。我想在perl脚本中创建pid_file。在阅读完文档后,我确信下面这段代码可以做到这一点:在使用Proc :: Daemon :: Init时创建pid_file

use Proc::Daemon; 
Proc::Daemon::Init({ pid_file => "/var/run/theprocess.pid"}); 

长话短说。身份证不起作用。我也尝试过Proc::Daemon->new()运营商,它也没有工作。我可能会错过什么?

+0

请提供有关两种情况下“没有工作”的更多细节。没有编译?运行时错误?错误消息(如果是的话)是什么?挂? etc ... – DVK

+0

没有创建pid文件。当守护进程脱离并运行时,完美地工作。 – rmarimon

+0

STDERR有没有错误? – DVK

回答

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

其实,问题是,它安装PROC ::守护::初始化Debian软件包是0.3版本,它不具有创建进程文件的功能。我最终做了这样的事情:

use Proc::Daemon; 
use Proc::PID::File; 

Proc::Daemon::Init(); 
if (Proc::PID::File->running()) { 
    exit; 
}