Предотвращение запуска команд управления более чем одной за один раз - PullRequest
2 голосов
/ 04 января 2012

Я разрабатываю длительный процесс, запускаемый командой управления Django, который должен запускаться довольно часто.Предполагается, что этот процесс запускается каждые 5 минут с помощью задания cron, но я хочу предотвратить запуск второго экземпляра процесса в том редком случае, когда первый занимает больше 5 минут.

Я думал о создании сенсорного файла, который создается при запуске процесса управления и удаляется при его завершении.Затем второй процесс управления командой проверит, чтобы убедиться, что сенсорный файл не существует перед запуском.Но это кажется проблемой, если процесс внезапно умирает без надлежащего удаления файла сенсорного экрана.Кажется, должен быть лучший способ сделать эту проверку.

Кто-нибудь знает какие-нибудь хорошие инструменты или шаблоны, которые помогут решить этот тип проблемы?

1 Ответ

3 голосов
/ 04 января 2012

По этой причине я предпочитаю иметь длительный процесс, который выводит свою работу из общей очереди. Под продолжительностью я имею в виду, что срок ее службы превышает единицу работы. Затем процесс контролируется некоторой службой демона, такой как supervisord , которая может контролировать перезапуск процесса в случае его сбоя. Это соответствующим образом делегирует работу чему-то, что знает, как управлять жизненными циклами процессов, и освобождает вас от необходимости беспокоиться о мелочности процессов posix в области действия вашего сценария.

Если у вас есть очередь, вы также можете позволить себе раскручивать несколько процессов, каждый из которых может извлекать задания из очереди и обрабатывать их, но, похоже, это выходит за рамки вашей проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...