@XXX-prog

Как заблочить исполнение скрипта, если он уже запущен?

Подскажите, как заблочить повторный запуск скрипта по крону, если предыдущий запуск скрипта еще не завершил работу, или завершил но с ошибкой (фатал еррор)?
Речь идет о PHP и Cron
В общем решение пока такое:
Это в конструктор
register_shutdown_function(array(&$this,"shutdown_handler"));

А это обработчик
public function shutdown_handler(){
      @fclose($this->fp);
    }

Блочим так:
$this->fp = fopen('tmp/lock.txt', 'w');

if(!flock($this->fp, LOCK_EX | LOCK_NB)) {
    echo("Script already running");
    exit(-1);
}
  • Вопрос задан
  • 904 просмотра
Решения вопроса 1
skobkin
@skobkin
Гентушник, разработчик на PHP и Symfony.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
XXXXPro
@XXXXPro
Fullstack Web developer
Сделать так: проверять наличие файла с определенным именем где-ниубдь в /tmp или /var/run, если он есть, то тут же делать выход из скрипта, если нет, то создавать такой файл, после чего выполнять необходимую работу и удалять файл перед завершением скрипта, если оно проходит корректно.
Ответ написан
@maxtm
Make money, not job
При старте пишите свой PID в файл.
При старте читает PID, чекаете - если процесс живет и он ваш - выходите.
Если процесса нет - стартуете.

Надеятся на то, что ваш скрипт доработает до конца и удалить файл не стоит, всякое бывает.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы