Я пытаюсь найти безопасный способ предотвратить столкновение заданий cron (т. Е. Предотвратить его запуск, если другой экземпляр уже запущен).
Некоторые параметры, которые я нашел, рекомендуют использовать блокировку файла.
Это действительно безопасный вариант? Что произойдет, если скрипт умрет, например? Остается ли замок?
Есть ли другие способы сделать это?
Этот образец был взят на http://php.net/flock и немного изменился, и это правильный способ сделать то, что вы хотите:
$fp = fopen("/tmp/lock.txt", "w+"); if (flock($fp, LOCK_EX | LOCK_NB)) { // do an exclusive lock // do the work flock($fp, LOCK_UN); // release the lock } else { echo "Couldn't get the lock!"; } fclose($fp);
Кредиты:
w+
вместо r+