Как стать автором
Обновить

Демонизация NodeJS приложений

Некоторе время назад я занялся разработкой на NodeJS, и почти сразу передо мной встал вопрос о демонизации моих приложений. То есть мне нужно, чтобы после запуска приложение висело в фоне, а если оно работает на боевом сервере, то ещё и нужно запускать его заново автоматически, если вдруг упадёт.



Сразу не додумался поискать готовое решение и поэтому пользовался командой disown в Linux. Вот так вот можно запустить приложение и при этом не занимать терминал, то есть можно будет дальше выполнять другие команды.
node main.js &

Но проблема в том, что после закрытия терминала/ssh-сессии приложение падает. Чтобы отвязать его от текущего сеанса и отправить в свободное плавание, существует команда disown. И теперь запуск приложения будет выглядеть так.
node index.js & disown %1

Подробнее об использовании этой команды можно посмотреть, например, тут.

Потом я наткнулся на утилиту forever. Она есть в npm и соответственно установить можно командой
npm i forever -g # не понимаю, почему никто не использует алиас i для install

Тут всё достаточно просто:
forever start main.js  # запуск приложения
forever restart main.js # перезапуск приложения 
forever stop main.js # остановка приложения
forever list # посмотреть список запущенных приложений
forever restartall # перезапуск всех приложений 
forever stopall # остановка всех приложений

Подробнее о возможностях утилиты можно посмотреть здесь. Мне же пришлось обернуть эту утилиту в небольшой bash-скрипт, для удобного запуска отдельных приложений.

И, наконец, совсем недавно я нашёл ещё одну утилиту для демонизации — pm2. Она так же есть d npm и установить можно командой:
npm i pm2 -g

pm2 предоставляет более обширные возможности.

Запускается приложение вот так:
pm2 start main.js --name same-name

Параметр --name нужно указывать для того случая, если у вас исполняемые файлы у разных одинаково называются, чтобы как-то различать процессы. Кстаи в forever это можно было делать только по пути к файлу.

Вот так можно посмотреть списки запущенных приложений:
pm2 list
pm2 monit


Результат первой команды это единовременный вывод в конcоль таблицы с запущенными приложениями.



А второй это мониторинг за состонием приложений в режиме реального времени. Что-то вроде top или htop.



Вот так:
pm2 stop same-name

Можно остановить приложение и в листинге будет указано, что оно остановлено.



Но его всё ещё можно запустить обратно:
pm2 start same-name


Чтобы убрать его из списка, нужно выполнить:
pm2 delete same-name

И останется только:



Так же pm2 поддерживает автозапуск приложений, у него есть API для написания своих скриптов, ещё он поддерживает кластеризацию в NodeJS и даже запуск приложений на других языках: php, ruby, python, sh, cofee. Подробнее здесь. Но это уже немного выходит за рамки текущей статьи и если будет интересно, то я напишу отдельно о работе с pm2.
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.