どんどんSOS JobSchedulerの深層に切り込んでいきたいと思います!
今回は、ジョブの実行とは切っても切り離せないリトライなどの挙動についてです。
JobSchedulerでは、ジョブが異常終了した場合(原則は戻り値が0以外)のリトライのことをSetBack(セットバック)と呼びます。
また、一旦サスペンドさせて、後でレジュームすることも可能です。
セットバック
セットバックはジョブのSetBackタブで設定します。
Set Back Count: 何回目の実行かを指定します。
Is Maximum: YesにするとそのSet Back Countを最後にリトライを終了します。
Delay: そのSet Back Countでのリトライを実行するまでの待ち時間を指定します。
上図の例では、このように動作します。
10:00(Run Timeに沿った通常の実行): 失敗
10:03(1回目のリトライ): 失敗
10:06(2回目のリトライ): 失敗
10:16(3回目のリトライ): 失敗 →最終的にそのジョブは失敗(ジョブチェーンの場合はエラー時のステートに遷移)
ジョブチェーンでのセットバックの有効化
セットバックを指定したジョブがジョブチェーンに組み込まれている場合、そのままではセットバックは動作しません。
上図のように、ジョブチェーンノードのOn Errorで、setbackと指定します。
サスペンドとレジューム
ジョブチェーンノードでのOn Errorの設定には、suspend(サスペンド)もあります。
サスペンドを指定した場合、ジョブの実行が失敗すると、そのジョブチェーンのオーダーはサスペンド状態に入って動作を停止します。(同じジョブチェーンの他のオーダーには影響を与えません。)
このように、JOCで見てみると、サスペンドに入ったことが分かります。
このオーダーの実行を再開(レジューム)する場合もJOCから操作します。
サスペンドに入ったオーダーを右クリックし、コンテキストメニューからResume orderをクリックします。
ジョブのStop On Errorに注意!
JOEでのジョブの設定で、OptionsタブにあるStop On Errorに注意してください。
デフォルトではチェックが入っているのですが、Stop On Errorが有効な場合、ジョブの戻り値が0以外の場合、そこでそのジョブの実行が完全に停止してしまいます。ジョブチェーンに組み込まれている場合、他のオーダーもそのジョブを実行できません。
サスペンドとの違いは下記のとおりです。
suspend: そのオーダーでのみ、そのジョブの実行が停止する(正確には、オーダーの実行が停止する)
Stop On Error: すべてのオーダーで、そのジョブの実行が停止する(ジョブそのものの実行が停止する)