我有一个Perl脚本,该脚本在某些时间执行许多其他脚本。
这些其他脚本有时可能会永久挂起或完全挂起,但是目前尚无办法判断这些其他脚本是否这样做。
如何实现一种检查脚本运行时间是否太长(以便用户可以采取措施)或彻底失败的方法。可以将计划作为电子邮件发送给适当的用户,通知他们。
下面的系统调用示例:
elsif ($job_type eq 'script') {
system("perl $job_dir/$job_args > $work_dir/$job_name.out 2> work_dir/$job_name.err");
}
最佳答案
使用 alarm
:
eval {
local $SIG{ALRM} = sub { die "alarm\n" }; # NB: \n required
alarm 120; # 2 Minute timeout
system("perl $job_dir/$job_args > $work_dir/$job_name.out 2> work_dir/$job_name.err");
alarm 0;
};
if ($@) {
die unless $@ eq "alarm\n"; # Propagate unexpected errors
# Timed out - Send out email to user
...
} else {
# Successfully ran command. Any cleanup here.
...
}
关于perl - Perl-如果系统命令失败或运行时间过长,如何停止它或运行另一个系统调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25547457/