Убедитесь, что процесс всегда запущен

23

Я начал хостинг сайтов некоторое время назад, используя Cherokee. Для внешних источников (FastCGI и т. Д.) У него есть возможность запустить процесс, если он не может найти работающий на указанном сокете или порту. Это здорово, потому что это означает, что если PHP или сайт Django падает (как они иногда делают), он перезапускает его автоматически.

На новом сервере, использующем PHP-FPM, я не смог использовать Cherokee (в нем есть ошибка с PHP), поэтому я перешел на NGINX. Мне очень нравится NGINX (из-за его стиля конфигурации), но у меня серьезные проблемы с перебоями процессов, которые никогда не появляются. PHP делает это иногда, но сайты Django представляют собой большую проблему. Я создал сценарии инициализации для них, и они запускаются при загрузке, но это не помогает мне, если они выходят из строя между перезагрузками.

Я думаю, что я ищу прокси FastCGI. Что-то, что, подобно Cherokee, знает, какие процессы должны запускаться на каких сокетах / портах, и порождает их по требованию. Существует ли такая вещь? Есть ли способ встроить это в NGINX (для простоты настройки)?

Oli
источник

Ответы:

13

Как насчет daemontools и, в частности, инструмента для надзора

Контролировать мониторинг службы. Он запускает службу и перезапускает службу, если она умирает. Настроить новую службу легко: все, что нужно для контроля - это каталог со скриптом запуска, который запускает службу.

Мурило
источник
+1 для daemontools. Тем не менее, вы часто не можете просто бросить сценарий, как /etc/init.d/apachectlв него. Вам часто нужно переписать свой собственный простой скрипт запуска для использования exec. Хотя мне бы хотелось увидеть еще несколько примеров использования daemontools
Стефан Ласевский,
У daemontools есть еще одно воплощение - рунит. Сейчас не так важно, что daemontools является общественным достоянием, но в более старом дистрибутиве может быть только runit.
Camh
5

Я daemontoolsподдерживаю это предложение, но если вам не нравится, как работает программное обеспечение DJB (по какой-либо причине), есть и другое supervisord.

Некоторое время назад я создал образ FreeBSD, который использовался supervisordдля управления nginxи gunicornкоторый использовался для размещения нескольких простых приложений WSGI, и весь процесс был довольно простым.

Если вы делаете это для Django, Gunicorn делает это действительно простым для развертывания приложений Django, кстати. Смотрите этот блог для более подробной информации.

Хэнк Гей
источник
4

Другим вариантом может быть использование monit , который я обычно использую.


источник
3

Вы рассматривали god?

Бог прост в настройке, легко расширяет среду мониторинга, написанную на Ruby.

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

Я использую его, чтобы удостовериться, что если экземпляры Rails / nginx упадут, они возродятся, и хотя я не вижу встроенной поддержки для проверки, использует ли он правильный порт или нет, но проблема в том, что процесс завершается неудачно или больше не работает, вы не ошибетесь god.

Крис Банч
источник
0

Хакерским решением было бы периодически запускать скрипт (через cron), который обнаруживает, если процесс не работает, и в этом случае перезапускает его.

Роберт Суишер
источник
0

Существуют различные способы перезапустить сбойный демон, обычно рекомендуется «respawn in inittab», но с некоторым ограничением, если машина действительно испорчена.

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

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

Пол Кроуфорд
источник
-1

Простой ответ - начните, напишите свой pid где-нибудь, и каждый раз x (секунды, минуты, ваша ставка) проверяйте, запущен ли процесс.

Длинный ответ - все вышеперечисленное - хорошие методы. Но несколько сложно.

Также имейте в виду, что быть живым и отвечать на запросы - это разные вещи.

lucabotti
источник
1
… И скрестите пальцы и надейтесь, что ничто не заскребет по файлу PID, не удалит его, не повторно использует его для другого демона, или перенаправит его на какой-то другой невинный и не связанный процесс, который не будет хорошо реагировать на проверку для того, чтобы быть ☺ Именно поэтому длинный ответ надлежащего супервайзера демонов, который запускает демоны как дочерние процессы и контролирует их с помощью обычных системных механизмов Unix / Linux, является давно принятым лучшим способом.
JdeBP