リトライ処理をするシェルスクリプトを作成してみました。
(今回、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)監修のもと掲載しています。
元記事は、こちら