失敗しても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シェルで無限ループを作成する一般的な方法は、コマンドを条件として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毎秒10回実行され、N+X実行Nにかかる時間も異なりますXscriptこの例は毎秒近づく必要がありますN

完了するまでに数秒script以上かかるため、複数のインスタンスを同時に実行できる状況を予想して準備する必要があります。N

関連情報