Ограничить перекрытие заданий cron с помощью flock ()

У меня есть 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?

Кроме того, где я могу вставить мой существующий код выше?

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector