Uncategorized

bashのretry

下記のコードを$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
$ 
タイトルとURLをコピーしました