我有一个非常简单的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次)脚本被终止。我不知道是谁杀的,我只知道它发生在“睡眠”呼叫期间。
有人能在这里给我一个提示吗?脚本被杀死后,它的工作还没有完成,这是一个大问题。
谢谢。
发布于 2010-07-16 03:58:49
在不知道您的系统上还运行着什么的情况下,这是任何人的猜测。您可以添加一个信号处理程序,但它会告诉您的是哪个信号(以及何时),而不是谁发送的:
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的输出,那么您可能还需要考虑添加一个警告和死处理程序。
https://stackoverflow.com/questions/3259350
复制相似问题