我有一个脚本,它偶尔会在与Web服务器通信时出现故障。服务器挂起或响应数据的速度非常慢。我目前使用alarm()
作为一个黑客获取脚本终止,以便不与攻击系统Perl闹钟()或Time :: Out Without Kernel SIG
线程,但是这会导致一个cron错误,这提醒系统管理员,真的不希望200个电子邮件谁这会在系统崩溃时产生。
是否有另一种方法终止脚本(或apiQuery,如果需要的话),不会导致一个非OK退出和相应的电子邮件?
我有一个脚本,它偶尔会在与Web服务器通信时出现故障。服务器挂起或响应数据的速度非常慢。我目前使用alarm()
作为一个黑客获取脚本终止,以便不与攻击系统Perl闹钟()或Time :: Out Without Kernel SIG
线程,但是这会导致一个cron错误,这提醒系统管理员,真的不希望200个电子邮件谁这会在系统崩溃时产生。
是否有另一种方法终止脚本(或apiQuery,如果需要的话),不会导致一个非OK退出和相应的电子邮件?
您可以在您的信号处理程序中引发异常,并在其他地方捕获它。
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;
}
感谢,我给这个一杆。虽然我在那里看到SIG {ALRM}。这是否仍然会导致内核报警?这就是我想要避免的。对noob问题抱歉。我继承了这个Perl脚本,我知道perl很少。 –
它捕捉到信号,所以你的程序不会死它 –
完美的作品,谢谢:) –
你可以发布你的代码吗?那么我们可以帮助解决方案。 –
或者至少添加一个[mcve]如果代码真的很大 –
(1)是的。 (2)你想要哪一个? //谢谢,请用更多信息填写您的问题。一些代码放在首位。 – zdim