下記のコードを$HOME/.bashrcに追加するとコマンドが失敗した場合に、一定時間待って、指定した回数リトライするretry関数を追加できます。
オリジナルは、ここのソースを参考に改良しました。(コメントしようと思いましたが、50以上の評価がないとコメントできませんでした。)
aws cliでリソースを作成した場合、awsコマンドは、リソース作成の終了を待たずに終わってしまいます。リソース作成が終わってから後続の処理をしたい場合に、適切なタイムアウトを設けてリトライするのに便利です。
コード
function retry() { if [ $# -lt 3 ]; then echo 'usage: retry <num retries> <wait retry secs> "<command>"' return 1 fi retries=$1 wait_retry=$2 shift 2 command=$@ for i in `seq 1 $retries`; do echo "$command" $command ret_value=$? [ $ret_value -eq 0 ] && break echo "> failed with $ret_value, $wait_retry sec waiting to retry..." sleep $wait_retry done return $ret_value }
使い方
成功する場合
$ retry 5 1 test 0 -eq 0 test 0 -eq 0 $ echo $? 0$
失敗する場合
$ retry 5 1 test 0 -eq 1 test 0 -eq 1 > failed with 1, 1 sec waiting to retry... test 0 -eq 1 > failed with 1, 1 sec waiting to retry... test 0 -eq 1 > failed with 1, 1 sec waiting to retry... test 0 -eq 1 > failed with 1, 1 sec waiting to retry... test 0 -eq 1 > failed with 1, 1 sec waiting to retry... $ echo $? 1 $