我有一个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 ?
另外,我在上面的实际操作代码实际上是什么?
答案 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
只是持有你的锁。您需要对此文件具有写入权限才能首先创建它。并为锁定文件使用唯一的名称,因此它不会干扰其他进程。