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