PHP - 限制与羊群cron作业重叠()(PHP - Restrict cron job ove

2019-10-21 02:20发布

我有一个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?

也是在约我是不是真的坚持我现有的代码在上面?

Answer 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只是握着你的锁。 你需要写访问此文件摆在首位,以创建它。 并使用唯一的名称为您锁定的文件,因此它不会与其他进程干扰。



文章来源: PHP - Restrict cron job overlap with flock()
标签: php cron flock