我有一个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
只是锁住了你的锁。您首先需要对该文件进行写访问才能创建它。并为锁定文件使用唯一的名称,这样它就不会干扰其他进程。