我想每 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
,其中N
10,以及运行所需的X
时间。script
这个例子应该更接近每一N
秒。
您应该预料到并准备好应对script
需要超过N
几秒才能完成的情况,因此您可能有多个实例同时运行。