我每隔几分钟运行一个cron作业,通过“待办事项”列表中的前50个项目运行,在每个项目上运行脚本并将其标记为在数据库中运行。
这样做很好,直到标记完整项目的表被某些东西锁定并且项目没有被标记掉。然后cron再次跑了,经历了相同的50个项目。
重复并重复这一过程,直到mysql中的进程列表很大,每隔几分钟才变大50。
我怎么能阻止这种情况发生? 我的想法是:
它们似乎都有起伏,我不确定如何正确实施。 任何人都有任何建议/更好的想法?
答案 0 :(得分:1)
您可以采取多种方法。
修改表格以跟踪状态。例如ToDo,Started,Complete。并且只处理“待办事项”。并且在您将其标记为已启动之前不要启动任务。如果cron作业失败,您将需要创建一种重新启动任务的方法。
如果您无法将任务标记为已完成,请使用交易并回滚该任务的内容。
同步cron作业的执行,一次只允许执行一次。为此,您可以锁定文件。检查文件的开头,如果无法获得锁定,则退出。
让cron作业永远运行,而不是定期执行。