Я начал хостинг сайтов некоторое время назад, используя Cherokee. Для внешних источников (FastCGI и т. Д.) У него есть возможность запустить процесс, если он не может найти работающий на указанном сокете или порту. Это здорово, потому что это означает, что если PHP или сайт Django падает (как они иногда делают), он перезапускает его автоматически.
На новом сервере, использующем PHP-FPM, я не смог использовать Cherokee (в нем есть ошибка с PHP), поэтому я перешел на NGINX. Мне очень нравится NGINX (из-за его стиля конфигурации), но у меня серьезные проблемы с перебоями процессов, которые никогда не появляются. PHP делает это иногда, но сайты Django представляют собой большую проблему. Я создал сценарии инициализации для них, и они запускаются при загрузке, но это не помогает мне, если они выходят из строя между перезагрузками.
Я думаю, что я ищу прокси FastCGI. Что-то, что, подобно Cherokee, знает, какие процессы должны запускаться на каких сокетах / портах, и порождает их по требованию. Существует ли такая вещь? Есть ли способ встроить это в NGINX (для простоты настройки)?
/etc/init.d/apachectl
в него. Вам часто нужно переписать свой собственный простой скрипт запуска для использованияexec
. Хотя мне бы хотелось увидеть еще несколько примеров использования daemontoolsреспаун в inittab
источник
Я
daemontools
поддерживаю это предложение, но если вам не нравится, как работает программное обеспечение DJB (по какой-либо причине), есть и другоеsupervisord
.Некоторое время назад я создал образ FreeBSD, который использовался
supervisord
для управленияnginx
иgunicorn
который использовался для размещения нескольких простых приложений WSGI, и весь процесс был довольно простым.Если вы делаете это для Django, Gunicorn делает это действительно простым для развертывания приложений Django, кстати. Смотрите этот блог для более подробной информации.
источник
Другим вариантом может быть использование monit , который я обычно использую.
источник
Вы рассматривали
god
?Я использую его, чтобы удостовериться, что если экземпляры Rails / nginx упадут, они возродятся, и хотя я не вижу встроенной поддержки для проверки, использует ли он правильный порт или нет, но проблема в том, что процесс завершается неудачно или больше не работает, вы не ошибетесь
god
.источник
Помимо daemontools и supervisord, есть daemonize .
источник
Хакерским решением было бы периодически запускать скрипт (через
cron
), который обнаруживает, если процесс не работает, и в этом случае перезапускает его.источник
Существуют различные способы перезапустить сбойный демон, обычно рекомендуется «respawn in inittab», но с некоторым ограничением, если машина действительно испорчена.
Демон watchdog также может отслеживать процесс через свой PID-файл. Однако это следует рассматривать только как вторичную линию защиты для перезагрузки машины, которая слишком больна, чтобы работать должным образом (например, нехватка памяти, взломанная вилка и т. Д.), А не в качестве основного способа или мониторинга и перезапуска демона.
Наконец, вы можете рассмотреть возможность мониторинга сложных систем с помощью nagios, чтобы предоставить администраторам глобальное представление. Он может запускать плагины для внешней проверки работы демона, что является более полной проверкой его функционирования, чем просто наличие действующего PID.
источник
Простой ответ - начните, напишите свой pid где-нибудь, и каждый раз x (секунды, минуты, ваша ставка) проверяйте, запущен ли процесс.
Длинный ответ - все вышеперечисленное - хорошие методы. Но несколько сложно.
Также имейте в виду, что быть живым и отвечать на запросы - это разные вещи.
источник