【问题标题】:Daemonize a perl script守护一个 perl 脚本
【发布时间】:2015-07-05 09:07:41
【问题描述】:

目前我正在寻找一个 perl 脚本的守护进程。遗憾的是,大多数答案都已过时,实际上我完全不明白如何开始守护进程(尤其是守护进程 perl 脚本)。

现在我正在查看 Proc Daemon,但我不知道从哪里开始,也不知道是否应该使用或不使用模块来完成。

我相信,如果我举一个我正在寻找的例子,会给这个问题更多的方向。

示例

假设我在 osx 上,我想编写一个可以作为守护进程运行的 perl 脚本。它响应信号 HUP,然后继续打印来自某个目录的文件的内容。如果它收到信号 USR1,它会以不同的方式打印出内容。作为守护进程执行此操作的最合适方法是什么?

【问题讨论】:

    标签: perl daemon


    【解决方案1】:

    这就是你所需要的:

    #!/usr/bin/perl
    
    use strict;
    use warnings;
    
    use Daemon::Daemonize qw( daemonize write_pidfile );
    
    sub sighup_handler {
       ...
    }
    
    sub sigusr1_handler {
       ...
    }
    
    {
       my $name          = "...";
       my $error_log_qfn = "/var/log/$name.log";
       my $pid_file_qfn  = "/var/run/$name.pid";
    
       daemonize(
          close  => 'std',
          stderr => $error_log_qfn,
       );
    
       $SIG{HUP}  = \&sighup_handler;
       $SIG{USR1} = \&sigusr1_handler;
    
       write_pidfile($pid_file_qfn);
    
       sleep while 1;
    }
    

    【讨论】:

    • 对不起,我不明白这个答案。
    • 这就是你要求的整个程序,减去你想在 SIGHUP 上执行的代码。将该代码放入sighup_handler。你不明白什么?
    • 很抱歉我是新手。此外,它将如何响应信号 USR1。或者可以不在 sighup_handler 中?我也会使用 $Sig{USR1} = 那么函数的引用?
    • 我没有看到你想挂钩两个信号,但是,嘿,令人惊讶的是,挂钩 USR1 与挂钩 HUP 的方式相同。
    • 用作STDERR重定向到的日志文件名,以及存放进程PID的PID文件名。
    猜你喜欢
    • 2015-11-02
    • 2012-12-06
    • 2011-06-25
    • 2018-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    相关资源
    最近更新 更多