share facebook facebook2 twitter menu hatena pocket slack

2013.02.20 WED

シェルスクリプトでリトライ処理

鈴木 宏康

WRITTEN BY鈴木 宏康

リトライ処理をするシェルスクリプトを作成してみました。
(今回、sub.shがリトライ対象です)


# cat test.sh
#/bin/sh
trap 'echo "NG: $?"' ERR
set -e
# ...

RETRY_COUNT=5
RETRY_INTERVAL=1
set +e
COUNT=0
while true; do
/root/sub.sh
if [ $? -eq 0 ]; then
break
fi
if [ $COUNT -eq $RETRY_COUNT ]; then
echo "Timeout!" >&2
exit 1
fi
COUNT=`expr $COUNT + 1`
sleep $RETRY_INTERVAL
done

set -e
# ...
exit 0

正常終了するように呼び出しスクリプトを記述してみます。


# cat sub.sh
#!/bin/sh
echo test
exit 0

シェルスクリプトを実行(sub.shを呼び出す)すると、すぐに正常終了します。


# ./test.sh
test

今度は下記のように異常終了するようにしておきます。


# cat sub.sh
#!/bin/sh
echo test
exit 1

シェルスクリプトを実行(sub.shを呼び出す)すると、指定間隔(RETRY_INTERVAL:1秒)で、
指定回数(RETRY_COUNT:5回)リトライ後、タイムアウトで(異常)終了します。


# ./test.sh
test
NG: 1
test
NG: 1
test
NG: 1
test
NG: 1
test
NG: 1
test
NG: 1
Timeout!

こちらの記事はなかの人(suz-lab)監修のもと掲載しています。
元記事は、こちら

鈴木 宏康

鈴木 宏康

愛知県生まれ。東京工業大学大学院修士課程修了。在学時より、ベンチャー企業でインターネットに関する業務に携わり、現在はクラウド(主にAmazon Web Services)上での開発・運用を軸とした事業の、業務の中心として活躍。