Держать только один запущенный процесс

zuxel

Новичок
Делаю обработку очереди, я планирую добавить по крону запуск процесса каждую минуту, который будет брать из очереди заявки и обрабатывать их.
Надо чтобы единовременно был запущен только один такой процесс, а такое может быть не всегда, т.к. если обработка заявки займет больше минуты, то новый процесс начнет обработку параллельно с запущенным ранее.
Как лучше реализовать такой функционал?
Я придумал один вариант - при запуске процесс пишет данные себя (ид процесса, идентификатор задачи, время запуска) в БД, при запуске новый проверяет БД, если видит что уже есть ранеесозданная его копия, то прекращает работу. Плюс сделать сборщик мусора, который будет убивать процессы, которые работают больше таймаута. Выглядит это все несколько громоздко, м.б есть лучше способы?
 

AmdY

Пью пиво
Команда форума
pid файл, сто раз уже обсуждалось, воспользуйтесь поиском.
 

AmdY

Пью пиво
Команда форума
угу, потому и послал в поиск, там и про супервизор и предложение фиксера о system.d
 

zuzmic

Новичок
можно запускать через flock
типа такого:
0 8 * * * www-data /usr/bin/flock -w 0 /path/to/lock/file.lock /usr/bin/php /path/to/php/script.php > /path/to/log/file.log 2>&1
 
Сверху