Pull to refresh

Демонизация 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.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.