失敗した場合のクローン操作の再試行

失敗した場合のクローン操作の再試行

リソースが利用できないときに定期的に失敗するcronジョブがあります。これらの障害を処理する最善の方法は、時間をかけて再試行することです。これを行う最良の方法は何ですか?失敗したスクリプトは独自のスケジュール調整を使用しますかat?もっと良い方法がありますか?おそらくそのような再試行インフラがすでにあるでしょう。

答え1

サービスが可能になるまで再試行を続ける必要があるため、このために専用ツールを構築しました。

https://github.com/minfrin/retry

~$ retry --until=success -- false
retry: 'false' returned 1, backing off for 10 seconds and trying again...
retry: 'false' returned 1, backing off for 10 seconds and trying again...
retry: 'false' returned 1, backing off for 10 seconds and trying again...
^C

最新のDebian、Ubuntu、Nixですぐに使えます。

答え2

ジョブを実行するスクリプトをスケジュールします。成功するまで、または多すぎる試みが行われるまで、スクリプトでジョブの実行を再試行してください。

これは、を実行してジョブが実行され、some-commandゼロ以外の終了状態を返すことで正常に失敗すると仮定します。

#!/bin/sh

sleeptime=15m # Sleep for 15 minutes after a failed try.
maxtries=8    # 8 * 15 minutes = about 2 hours total of waiting,
              # not counting running and failing.

while ! some-command; do
        maxtries=$(( maxtries - 1 ))
        if [ "$maxtries" -eq 0 ]; then
                echo Failed >&2
                exit 1
        fi

        sleep "$sleeptime" || break
done

答え3

at now + 17 minutesただスケジュールを変更してください。読むman at

クローン自体内で最初のコマンドが失敗した場合は、スケジュールをリセットできます。

<command> || at now + 17 minutes <command>

at最初のコマンドが失敗した場合にのみ、コマンドは再スケジュールされます。もちろん、スケジュールは一度だけ変更され、2回目の実行も失敗すると再実行されません。

ここで唯一の注意点は、一部の可視性が失われることです。たとえば、メールまたはクローンログで2番目の実行結果を見ることはできません。

関連情報