cron のように、スケジュールする必要があるタスクのリストがあります。これは、SQL サーバーでのバックアップ用です。
データベースは、いくつかの組み合わせで FULL、DIFF、LOGS バックアップを実行します。
そう:
- 毎日午前8時に満席
- 毎時DIFF
- 10分ごとに記録
ただし、次の問題があります。
- サーバーが午前 8 時 15 分に起動した場合、FULL タスクは実行されません。
- FULL が失敗した場合、DIFF & LOG を実行しても意味がありません
- サーバーが土曜日の午前 8 時 15 分に起床した場合、LOG は 8 時 20 分に開始して起動し、次の月曜日まで待機する必要があります。
- LOG に時間がかかりすぎる場合 (午前 9:01 に終了しない場合)、LOG がまだ完了していないときに DIFF を開始します。私はそれをしたくない !
私はこれを Quartz.net で行いますが、それは接線です-私は lib を変更したり、削除したりします.-. したがって、私の主な目的は、タスクのシーケンス/実行における信頼性です。
シーケンシャル コードでは、これは非常に簡単に実行できます。
- DO_FULL THEN
- DO_DIFF THEN
- DO_LOG
ただし、スケジューラを使用すると、これは不可能になります (少なくともクォーツでは)。
問題は時間の管理です。タスクが 1 時間ごとに開始されるようにマークされている場合、前のタスクが完了していない可能性があるため、厳密なルールというよりもヒントに違いありません。また、サイクルを開始するには、FULL を実行する必要があります。
ここでアルゴリズムを適用する必要があるのだろうか。