Php 如何确保sql表未锁定/停止并发cron

Php 如何确保sql表未锁定/停止并发cron,php,mysql,cron,cron-task,Php,Mysql,Cron,Cron Task,我有一个cron作业,每隔几分钟运行一次,它遍历“待办事项”列表上的前50项,对每个项运行一个脚本,并将其标记为在数据库中运行 这一直很有效,直到将项目标记为完整的表被某个东西锁定,并且项目没有标记出来。然后,cron再次运行并检查了相同的50项 这一过程不断重复,直到mysql中的进程列表非常庞大,并且每隔几分钟就增加50个 我怎样才能阻止这一切? 我的想法是: 在再次运行之前,向脚本添加代码以查看cron是否仍在运行 在运行新的SELECT查询以获取接下来的50项之前,检查mysql表中锁

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

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

这一过程不断重复,直到mysql中的进程列表非常庞大,并且每隔几分钟就增加50个

我怎样才能阻止这一切? 我的想法是:

  • 在再次运行之前,向脚本添加代码以查看cron是否仍在运行
  • 在运行新的SELECT查询以获取接下来的50项之前,检查mysql表中锁定的表
它们似乎都有起伏,我不知道如何正确地实施。
有人有什么建议/更好的主意吗?

你可以采取几种方法

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

  • 如果无法将任务标记为完成,请使用事务并回滚任务内容

  • 同步cron作业的执行,以便一次只允许执行一次。要做到这一点,您可以锁定一个文件。检查文件的开头,如果无法获得锁,则退出

  • 让cron作业以休眠的方式永远运行,而不是周期性地执行


  • 将锁文件添加到更新shell脚本中。1) 检查锁是否存在:退出否则创建锁2)执行工作3)移除锁非常感谢这些,我认为选项1是我最好的选择,尽管它需要额外的SQL调用。它将增加额外的功能,使人们能够随时查看正在进行的项目。