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

时间:2014-09-30 15:24:28

标签: php cron 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

另外,我在上面的实际操作代码实际上是什么?

1 个答案:

答案 0 :(得分:1)

你的守则在这里:

$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只是持有你的锁。您需要对此文件具有写入权限才能首先创建它。并为锁定文件使用唯一的名称,因此它不会干扰其他进程。