gpt4 book ai didi

php - 如何防止 cron 作业执行,如果它已经在运行

转载 作者:IT王子 更新时间:2023-10-29 01:23:34 25 4
gpt4 key购买 nike

我有一个 php 脚本,我在 CentOS 上每 10 分钟通过 cron 执行这个脚本。

问题是,如果 cron 作业需要超过 10 分钟,那么同一 cron 作业的另一个实例将启动。

我尝试了一个技巧,那就是:

  1. 使用 php 代码创建一个锁文件(与 pid 文件相同)cron 作业开始了。
  2. 在作业完成时使用 php 代码删除了锁定文件。
  3. 当任何新的 cron 作业开始执行脚本时,我检查了是否锁定文件存在,如果存在,则中止脚本。

但是可能存在一个问题,即当锁定文件由于某种原因没有被脚本删除或删除时。cron 将永远不会重新启动。

如果 cron 作业已经在运行,我有什么办法可以通过 Linux 命令或类似命令再次停止它的执行?

最佳答案

Advisory locking正是出于这个目的。

您可以使用 flock() 完成建议锁定.只需将该函数应用于先前打开的锁定文件,以确定另一个脚本是否锁定了它。

$f = fopen('lock', 'w') or die ('Cannot create lock file');
if (flock($f, LOCK_EX | LOCK_NB)) {
// yay
}

在这种情况下,我添加了 LOCK_NB 以防止下一个脚本等待第一个脚本完成。由于您使用的是 cron,因此总会有下一个脚本。

如果当前脚本提前终止,任何文件锁都会被操作系统释放。

关于php - 如何防止 cron 作业执行,如果它已经在运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10552016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com