PHP-使用flock()限制cron作业重叠


PHP - Restrict cron job overlap with flock()

我有一个php脚本,用于处理和创建大量图像,这些图像使用cron作业每5分钟运行一次。我希望能够限制这一点,这样它一次只能运行一次,如果每次运行时间超过5分钟,就不会重叠。

flock()似乎是实现这一点的最佳方式,但我很难理解我应该如何将其添加到现有的脚本中。我的cron作业设置为运行以下文件-

images.php:

$array=array("Volvo","BMW","Toyota","Audi","Ford","Alfa","Porsche","Mercedes");
foreach ($array as $car) {
   generateImageCustomFunction($car);
}

我想使用非阻塞锁,所以基于示例:

$fp = fopen('/tmp/lock.txt', 'r+');
if(!flock($fp, LOCK_EX | LOCK_NB)) {
    echo 'Unable to obtain lock';
    exit(-1);
}
fclose($fp);

"lock.txt"只是一个存储/指示锁的纯文本文件,还是我试图运行的实际文件——在这种情况下是images.php

此外,我实际将现有代码粘贴到上面的什么位置?

您的代码位于此处:

$fp = fopen('/tmp/lock.txt', 'w');
if(!flock($fp, LOCK_EX | LOCK_NB)) {
    echo 'Unable to obtain lock';
    exit(-1);
}
// YOUR CODE HERE    
sleep(5);
fclose($fp);

lock.txt只是锁住了你的锁。您首先需要对该文件进行写访问才能创建它。并为锁定文件使用唯一的名称,这样它就不会干扰其他进程。