PHP - 限制 cron 作业与集群()重叠

标签 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

另外,我实际上将现有代码粘贴在上面的哪里?

最佳答案

您的代码位于此处:

$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 - 限制 cron 作业与集群()重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26124513/

相关文章:

java - Spring-Boot @Scheduled Cron 表达式在两个任务之间稍微延迟?

c - 如何在 C 中使用 fork 写入和读取文件

javascript - 在不刷新页面的情况下打开更改DIV

php - symfony2 自定义时间选择字段

PHP 文件 - 使用数据库问题中的值填充动态 <select> 标记

Java 程序在 cronjob 调用后没有关闭

linux - 使用 bash 脚本从具有相同文件夹名称 XML 的不同位置删除超过 4 周的 xml 文件

php - json_decode 和内存清除

python - 仅在未运行时使用 cron 运行 python 脚本

ios - 'Flock' iOS 应用程序如何检测何时拍摄了照片?