実行を最大5回まで再試行するには、スクリプトに再試行ロジックを作成する必要がありますか?

実行を最大5回まで再試行するには、スクリプトに再試行ロジックを作成する必要がありますか?

次の条件に従って、15秒後に最大5回の実行を再試行するロジックをシェルスクリプトに書きたいと思います。「ステータスコード=失敗」いくつかの問題が原因で失敗した場合。

ベストアンサー1

for i in 1 2 3 4 5; do command && break || sleep 15; done

"command"を希望のコマンドに置き換えます。これは、「状態コード=失敗」がゼロ以外の戻りコードを意味すると仮定する。


多様性:

構文を使用してください{..}。ほとんどのシェルでは機能しますが、BusyBoxでは機能しませんsh

for i in {1..5}; do command && break || sleep 15; done

seq失敗したコマンドの終了コードを使用して渡します。

for i in $(seq 1 5); do command && s=0 && break || s=$? && sleep 15; done; (exit $s)

上記と同じですが、sleep 15最終失敗後にスキップしました。最大ループ数を一度だけ定義するのが最善であるため、ループの先頭で休止を実行するだけですi > 1

for i in $(seq 1 5); do [ $i -gt 1 ] && sleep 15; command && s=0 && break || s=$?; done; (exit $s)

おすすめ記事