我有一个必须安排的任务列表,比如 cron。这是用于 sql server 上的备份。
数据库将以多种组合方式执行 FULL、DIFF、LOGS 备份。
所以:
- 每天早上 8:00 吃饱
- 每小时差
- 每 10 分钟记录一次
但是,我有这个问题:
- 如果服务器在上午 8:15 醒来,则不执行 FULL 任务。
- 如果 FULL 失败,则执行 DIFF & LOG 没有意义
- 如果服务器在周六早上 8:15 醒来,LOG 开始 8:20 启动,那么完整必须等待下周一。
- 如果 LOG 占用太多(上午 9:01 未完成),则 DIFF 在 LOG 尚未完成时开始。我不想那样!
我用quartz.net做这个,但那是切线的-我愿意更改lib,删除它等等-。所以我的主要目标是任务顺序/执行的可靠性。
在顺序代码中,这很容易做到:
- DO_FULL 那么
- DO_DIFF 那么
- DO_LOG
但是,使用调度程序这是不可能的(至少使用石英)。
问题在于时间的管理。当任务被标记为每小时开始时,必须更多的是提示而不是硬规则,因为前一个可能没有完成。此外,做 FULL 是开始循环的必要条件。
我想知道算法必须在这里应用。