В настоящее время я работаю над личным проектом, который в основном контролирует некоторые вещи круглосуточно. Один - это процесс, который использует PhantomJS, а другой сканирует некоторые другие API и отправляет электронные письма, если возникает определенная ситуация.

Когда все запущено и работает, все работает именно так, как я хочу, но, к сожалению, в настоящее время каждые 2-3 дня что-то происходит обычно в глубокой ночи, и сканер API просто зависает. Он написан на Python и запускается каждые три секунды, и когда я проверяю журнал на следующий день, никаких сбоев нет, ничто не выглядит необычно, но по какой-то причине он перестает работать.

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

Для материала PhantomJS ... время от времени это просто взрывается. Опять же, там будет происходить очистка, исправление этих проблем и, возможно, полная их замена.

Но, в то же время, что я хотел бы сделать, это перезапустить их каждые 24 часа в сутки. Это определенно не идеально, но то, что я сейчас делаю, решит 99% моих проблем.

В идеальном мире у меня был бы список процессов в сочетании со списком PID. Каждые 24 часа, в то время, когда я запретил, я хочу, чтобы этот контроллер проходил через каждый из PID, отправлял обычный сигнал уничтожения (один из них обращается к БД, поэтому я бы хотел, чтобы он благополучно закрылся, если возможно), затем подождите в течение запрещенного периода времени (скажем, 30 секунд), затем отправьте сигнал sudo kill -9 в PID для аварийных аварийных ситуаций, затем снова запустите команду запуска.

Я изучил, может быть, с помощью Supervisor для этого, но не казалось (на первый взгляд), чтобы сделать то, что я ищу.

Я полностью согласен, возможно, использую 2-3 разные программы для этого (например, cron + supervisord + python) вместо того, чтобы искать одну, если не существует единственного идеального решения.

1 ответ1

1

Мое предпочтительное решение - это Python-скрипт на основе cron, который в первую очередь заботится о запуске отслеживаемых процессов, когда они не запущены. Он может сам получать и хранить PID дочерних процессов (и, возможно, другие метаданные, если необходимо, например, отметку времени последней итерации OK) для последующего использования или просто отслеживать такие файлы, которые сами дочерние процессы создают.

На первой итерации я воспользовался бы преимуществами относительно предсказуемых шаблонов / сроков сбоев и изменил бы соответствующие дочерние процессы, чтобы просто чисто завершить работу после определенного числа итераций или общего времени выполнения. Процесс мониторинга просто перезапустит их.

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

Для фактического уничтожения более сложных структур процессов вы можете проверить мой ответ на этот вопрос: https://stackoverflow.com/questions/30780487/python-script-to-monitor-process-and-sub-processes.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .