我有四个任务(t1、t2、t3、t4)需要每 7 天在一个项目(一个 URL)上按顺序运行。我使用 gearman 来运行这些任务,并使用 cronjob 将项目发送到 gearman 队列。项目的每个任务都有一个 date_run 分配给它。如果 t1 的 date_run 距离现在不到 7 天,则该任务被发送到队列。如果 t2 的 date_run 小于 t1,则该任务被发送到队列中......等等。
我遇到的问题是,如果某个项目的 t1 已排队,但在 cronjob 再次启动之前还没有时间完成。由于 date_run 在任务完成之前不会更新,因此看起来该任务尚未排队,并且队列中的同一项目将重复 t1 。
我想到的解决方案是:
- 为每个任务添加唯一标识符并检查它们是否已经排队
- 只需检查队列是否为空,并且在队列为空之前不要再排队
- 将 date_queued 添加到 item 表并使用它而不是 date_run on t1 来安排每 7 天的任务
我想我会先检查stackoverflow,如果有解决这个问题的“最佳方法”?我似乎无法理解它。:S
谢谢!