使用 bash 运行脚本并提供终止时间

使用 bash 运行脚本并提供终止时间

是否可以从 bash(例如 python)运行一个带有终止时间的脚本,这意味着如果该脚本运行的时间超过 X 秒,则终止它?

答案1

是的,可以运行一个带有超时终止的 bash 脚本。你可以这样做:

1. 使用暂停

它运行一个有时间限制的命令。一般语法包括:

timeout signal duration command/script arguments

在哪里 :

  • signal 是信号名称或相应的编号。请参阅人 7 信号
  • 持续时间是以数字指定的超时时间,后缀为s几秒钟后,m几分钟后,h用了几个小时 ,d好几天。
  • 默认值是秒,当您仅指定一个数字时。例如,假设您想在 2 分钟后终止脚本,那么:

    timeout 2m /path/to/script arg1 arg2
    
  • NOTE:默认超时信号是SIGTERM有些进程不会终止。在这种情况下,我们需要使用SIGKILL信号来终止该进程。

        timeout -s KILL 2m /path/to/script arg1 arg2
    

    或者

        timeout -k 30 2m /path/to/slow-command arg1 arg2
    

    在这种情况下,timeout 首先SIGTERM在初始 2 分钟超时后发送信号。然后,等待另一个 30 秒超时,SIGKILL如果进程仍在运行,则向进程发送一个。

2. 我没有timeout命令 :

嗯,如果由于某种原因你无法使用,有很多替代方案或解决方法timeout。这些是:

  1. sleep当时条件kill

       /path/to/script arg1 arg2 & sleep 2m ; kill $!
    
  2. Perl 警报(可在顺序脚本中使用):

       perl -e "alarm 120; exec @ARGV" "/path/to/script arg1 arg2"
    
  3. 使用预计命令 :

       time_out=120
       command="/path/to/script arg1 arg2"
    
       expect -c " set echo \"-noecho\";
                   set timeout $time_out;
                   spawn -noecho $command;
                   expect timeout { exit 1 } eof { exit 0 } "
    

请随意添加更多详细信息。

相关内容