2017-09-12 63 views
-1

我有一个脚本,它偶尔会在与Web服务器通信时出现故障。服务器挂起或响应数据的速度非常慢。我目前使用alarm()作为一个黑客获取脚本终止,以便不与攻击系统Perl闹钟()或Time :: Out Without Kernel SIG

线程,但是这会导致一个cron错误,这提醒系统管理员,真的不希望200个电子邮件谁这会在系统崩溃时产生。

是否有另一种方法终止脚本(或apiQuery,如果需要的话),不会导致一个非OK退出和相应的电子邮件?

+4

你可以发布你的代码吗?那么我们可以帮助解决方案。 –

+3

或者至少添加一个[mcve]如果代码真的很大 –

+0

(1)是的。 (2)你想要哪一个? //谢谢,请用更多信息填写您的问题。一些代码放在首位。 – zdim

回答

-1

您可以在您的信号处理程序中引发异常,并在其他地方捕获它。

my $success = eval { 
    local $SIG{ALRM} = sub { die "Failure" }; 
    alarm 10; 
    do_something_long(); 
    alarm 0; 
    1; 
}; 
if (!$success) { 
    warn "Timeout!\n" if $verbose; 
    exit 0; 
} 
+0

感谢,我给这个一杆。虽然我在那里看到SIG {ALRM}。这是否仍然会导致内核报警?这就是我想要避免的。对noob问题抱歉。我继承了这个Perl脚本,我知道perl很少。 –

+0

它捕捉到信号,所以你的程序不会死它 –

+0

完美的作品,谢谢:) –