Когда node.js опускается, как я могу восстановить его автоматически?

Так как node - это в основном один процесс, когда что-то идет ужасно неправильно, все приложение умирает.

Теперь у меня есть несколько приложений, созданных на основе express, и я использую некоторые ручные методы для предотвращения продолжительных простоев (process.on('uncaughtException') и пользовательский монитор сердечного ритма).

Любые предложения сообщества? Лучшие практики? Каркасы?

Спасибо! А

Ответ 1

Используйте что-то вроде forever

или используйте supervisor.

Просто npm link, а затем sudo supervisor server.js.

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

В идеале, вы хотите перейти к полномасштабному балансировщику нагрузки, который является отказоустойчивым. Если один сбой node в вашем балансе балансировки нагрузки вы хотите, чтобы он был тихо перезагружен, а все соединения и данные были спасены.

Лично я бы рекомендовал supervisor для разработки (он написан isaacs!) и полномасштабный балансировщик нагрузки (либо nginx, либо node) для вашего реального сервера производства.

Конечно, уже запущенный несколько серверов node обрабатывается параллельно, потому что вы заботитесь о масштабировании по нескольким ядрам справа;)

Ответ 2

Используйте forever.

"Простой инструмент CLI для обеспечения непрерывного выполнения заданного script (т.е. навсегда)"

Просто установите его с помощью npm

npm install forever

и введите

forever start app.js

Ответ 3

Если вы используете Ubuntu, вы можете использовать upstart (который установлен по умолчанию).

$cat/etc/init/my_app.conf

описание "my_app" автор "меня"

начать (локальные файловые системы и net-device-up IFACE = eth0) остановить выключение

респаун

exec sh -c "env NODE_ENV = production node/path/myapp/app.js → /var/log/node.log 2 > & 1"

"respawn" означает, что приложение будет перезапущено, если оно умирает.

Чтобы запустить приложение

запустите my_app

Для других команд

man initctl

Ответ 4

Попробуйте посмотреть forever.

Ответ 5

Я настоятельно рекомендую forever тоже. Я использовал его вчера и его ветер:

  • Установить npm install forever

  • Запустите приложение forever start myapp.js

  • Проверьте, работает ли его forever list

Попробуйте убить ваше приложение:

  • ps

  • Получите ваш myapp.js pid и запустите kill <pid

  • запустите forever list, и вы увидите, что он снова запущен.

Ответ 6

Вы можете попробовать использовать Fugue, библиотеку для node.js, похожую на Spark или Unicorn:

https://github.com/pgte/fugue

Fugue может управлять любым типом сервера node.js, а не только веб-серверами, и он настроен и настроен как node.js script, а не команда CLI, поэтому обычная node.js build и инструментальные средства для развертывания могут использовать его.