У меня есть PHP-скрипт, который обрабатывает и создает много изображений, которые запускаются каждые 5 минут с помощью задания cron. Я хочу иметь возможность ограничить это, чтобы он мог запускаться только один раз за раз и не перекрываться, если каждый запуск занимает больше 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
просто держит твой замок Вам нужен доступ для записи в этот файл, чтобы создать его в первую очередь. И используйте уникальное имя для вашего файла блокировки, чтобы оно не мешало другим процессам.
Других решений пока нет …