即使失败,如何每 N 秒连续运行 bash 脚本?

即使失败,如何每 N 秒连续运行 bash 脚本?

我想每 N 秒运行一个 bash 脚本,即使它失败,我也希望while循环继续而不崩溃。

我正在使用以下解决方案如何每N秒重复运行bash脚本?:

同时脚本;睡 10 个小时;完毕

有评论说:This is the canonical way to repeat a command as long as it doesn't fail..如果我的脚本失败,我会观察到 while 循环被终止。


有没有办法try...catch在脚本上应用机制并继续while循环,即使脚本失败?

答案1

在 POSIX shell 中编写无限循环的常见方法while是使用命令true作为条件:

while true ; do
  script
  sleep 10
done

答案2

您可以尝试交换循环中的条件和操作while,并script在后台运行:

N=10
while sleep $N
do
  script &
done

这使得循环机制不关心script成功还是失败。

这也比您的示例更容易终止。只需识别并终止该sleep进程即可。这将导致sleep返回一个错误代码,进而终止while循环。

它还可以使您的脚本运行更接近您请求的确切时间间隔。您最初的示例将script每秒运行一次N+X,其中N10,以及运行所需的X时间。script这个例子应该更接近每一N秒。

您应该预料到并准备好应对script需要超过N几秒才能完成的情况,因此您可能有多个实例同时运行。

相关内容