リトライ処理をするシェルスクリプトを作成してみました。
(今回、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!