Когда 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 и инструментальные средства для развертывания могут использовать его.