0

我每隔几分钟就会运行一个 cron 作业,它会遍历“待办事项”列表中的前 50 个项目,在每个项目上运行一个脚本并将其标记为在数据库中运行。

这一直很好,直到将项目标记为完整的表被某些东西锁定并且项目没有被标记。然后 cron 再次运行并检查了相同的 50 个项目。

如此反复,直到 mysql 中的进程列表非常庞大,并且每隔几分钟只会增加 50 倍。

我怎么能阻止这种情况发生?我的想法是:

  • 在脚本中添加代码以查看 cron 是否仍在运行,然后再次运行
  • 在运行新的 SELECT 查询以获取接下来的 50 项之前检查 mysql 表中的锁定表

他们似乎都有起伏,我不确定如何正确实施。任何人有任何建议/更好的想法?

4

1 回答 1

1

您可以采取几种方法。

  1. 修改您的表以跟踪状态。例如,待办事项、已开始、已完成。并且只处理“ToDo”。并且在您可以将其标记为已开始之前不要开始任务。如果 cron 作业失败,您将需要创建一种重新启动任务的方法。

  2. 如果您无法将其标记为完成,请使用事务并回滚任务的内容。

  3. 同步 cron 作业的执行以一次只允许执行一次。为此,您可以锁定文件。在开始时检查文件,如果无法获得锁定则退出。

  4. 让 cron 作业在休眠状态下永远运行,而不是定期执行。

于 2013-03-20T17:41:44.990 回答