shell - コマンドが成功するまで何度かリトライする
標準コマンドにありそうでなかったので作った。
色んなコマンドで使いたかったので、ちょい汎用的なファンクションにしました。
function retryable
こんなファンクションを作る。
リトライ回数を変えたい場合は {1..3}
を調整する。
function retryable() {
for i in {1..3}; do
"$@" && break
done
return $?
}
このファンクションの引数に、リトライしたいコマンドを渡せば OK.
成功する場合
$ set -x # トレース出力用
$ retryable test 0 -eq 0
+ retryable test 0 -eq 0
+ for i in '{1..3}'
+ test 0 -eq 0
+ break
+ return 0
失敗 (リトライ) する場合
$ set -x # トレース出力用
$ retryable test 0 -eq 1
+ retryable test 0 -eq 1
+ for i in '{1..3}'
+ test 0 -eq 1
+ for i in '{1..3}'
+ test 0 -eq 1
+ for i in '{1..3}'
+ test 0 -eq 1
+ return 1
組み込んだはいいけど
ちょいちょいバッチがこけるからリトライ処理を組み込んだのに、組み込んだら全くこけなくなるという不思議。
— Akihiro Kondo (@akkinoc) April 27, 2015