2

我有一个非常简单的 perl 脚本,它在一个函数中执行以下操作:

    if ( legato_is_up() ) {
        write_log("INFO:        Legato is up and running. Continue the installation.");
        $wait_minutes = $WAITPERIOD + 1;
        $legato_up = 1;
    }
    else {
        my $towait = $WAITPERIOD - $wait_minutes;
        write_log("INFO:        Legato is not up yet. Waiting for another $towait minutes...");
        sleep 30;
        $wait_minutes = $wait_minutes + 0.5;
    }

出于某种原因,有时(如 3 次运行中的 1 次)脚本会被杀死。我不知道谁对杀戮负责,我只知道它发生在“睡眠”呼叫期间。

有人可以在这里给我一个提示吗?脚本被杀死后,它的工作没有完成,这是一个大问题。

谢谢。

4

1 回答 1

1

在不知道您的系统上还运行什么的情况下,这是任何人的猜测。您可以添加一个信号处理程序,但它只会告诉您它是哪个信号(以及何时),而不是是谁发送的:

foreach my $signal (qw(INT PIPE HUP))
{
    my $old_handler = $SIG{$signal};
    $SIG{$signal} = sub {
        print time, ": ", $signal, " received!\n";
        $old_handler->(@_) if $old_handler;
    };
}

如果您不记录来自 stderr 的输出,您可能还需要考虑添加 WARN 和 DIE 处理程序。

于 2010-07-15T19:58:49.230 回答