Есть ли польза от использования Monit вместо базовой настройки выскочки?
я настраиваю свой сервер для запуска узла.js как демон. Я настроил Upstart для обработки запуска и выключения узла, который прекрасно работает. Следующий шаг-убедиться, что узел.js перезапускается, если он умирает. Несколько из справочники предложили использовать Монит (или Фуга) для мониторинга процесса (в случае Monit путем выполнения HTTP-запроса к серверу и ожидания ответа).
Я с удовольствием использую что-то вроде Monit или Fugue, но я не уверен, почему бы не (Или не мог) просто использовать Upstart's функция respawn. Я предполагаю, что Upstart будет контролировать PID запущенного процесса и просто запустить его снова, если он умрет. Что дает вам Монит или Фуга, чего не дает выскочка?
2 ответа:
учитывая, что выскочка просто проверяет PID, такой инструмент, как Monit, который делает фактический запрос, предоставит вам ответ на здравомыслие приложения более точно. Процесс может быть счастливо запущен, но застрял в некотором роде таким образом, что он не обслуживает запросы.
я настоятельно рекомендую использовать как Монит и выскочка. Выскочка позволяет легко деамонизировать узел.js и Monit поставляется с множеством полезных проверок приложений, включая использование памяти, http-запросы ,использование ЦП...
это пример самой простой настройки, которую вы можете получить. Вы также можете легко добавить другую конфигурацию monit (с тем же сценарием запуска и остановки), но используя PID-файл и статистику процесса мониторинга.
для приведенной ниже конфигурации создайте простой локальный обработчик запросов в вашем приложении, который просто отвечает статусом 200, если все хорошо.
Монит конфиг:
check host app_name with address 127.0.0.1 start "/sbin/start app_name" stop "/sbin/stop app_name" if failed port 80 protocol HTTP request /ok with timeout 5 seconds then restart
скрипт выскочки (/etc/init / app_name):
description "app_name" start on startup stop on shutdown script # Node needs HOME to be set export HOME="path/to/node/app" exec sudo -u nodejs /usr/local/bin/node path/to/node/app/server.js production 2>>/var/log/app_name.error.log >>/var/log/app_name.log end script