【发布时间】:2012-05-20 02:08:09
【问题描述】:
我有一个 php 脚本,我在 CentOS 上每 10 分钟通过 cron 执行这个脚本。
问题在于,如果 cron 作业需要超过 10 分钟,那么同一 cron 作业的另一个实例将启动。
我尝试了一个技巧,那就是:
- 使用 php 代码创建了一个锁定文件(与 pid 文件相同) cron 作业开始了。
- 在作业完成时删除了带有 php 代码的锁定文件。
- 当任何新的 cron 作业开始执行脚本时,我检查了是否锁定 文件存在,如果存在,则中止脚本。
但是可能存在一个问题,即当锁定文件由于某种原因没有被脚本删除或删除时。 cron 将永远不会重新启动。
如果 cron 作业已经在运行,我有什么办法可以再次停止它的执行,使用 Linux 命令或类似的命令?
【问题讨论】:
-
(编辑)我的建议只是作为一种解决方案发布,以防flock() 不起作用,我建议您先尝试Jack 的解决方案。 我已经测试过使用
flock()但由于某种原因并没有停止 cron 脚本的多个实例。所以经过一番搜索,我找到了这个类并稍微修改了它以供我自己使用:abhinavsingh.com/blog/2009/12/… -
使它成为一个服务:
forever() { do_stuff(); sleep_10_minutes(); }(伪代码) -
@Leonid Shagabutdinov 的回答应该被认为是解决这个问题的正确方法。