Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
aboutlinux
5 лет назад
linux

Закрываем окно удаленного терминала без закрытия программ (часть 2, для скриптов NodeJS)

image.png

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

Сразу я почему-то не додумалась поискать готовое решение и поэтому пользовалась командой disown в Linux чтобы запустить приложение и при этом не занимать терминал, то есть можно будет дальше выполнять другие команды, или вообще закрыть консоль/терминал и отключиться от удаленки.

Потом я наткнулась на утилиту forever. Она есть в npm и соответственно установить этот пакет можно командой
npm i forever -g (разумеется у вас на компьютере уже должен быть установлен движок NodeJS)

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

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

И, наконец, всего пару дней назад, @denis-skripnik показал мне ещё одну утилиту для управления приложениями - менеджер приложений pm2. Она также есть в npm и установить можно командой:
npm i pm2 -g

pm2 предоставляет более обширные возможности управления приложениями (включая фоновые).

Запускается приложение вот так:
pm2 start main.js --name same-name, где main.js - скрипт, который вам необходимо запустить.
Параметр --name нужно указывать для того случая, если вам надо одновременно запустить из разных папок несколько скриптов с одинаковыми именами, чтобы система могла как-то различать процессы.
Ну и разумеется, если работа вашего скрипта предполагает внесение каких-то изменений на дисках, к примеру создание каких-то файлов, баз данных, перезапись информации итд - приложение следует запускать с админскими правами, то есть либо из-под root, или так:
sudo pm2 start main.js --name same-name

Вот так можно посмотреть списки запущенных приложений:
sudo pm2 list
Результат введения команды - единовременный вывод на экран таблицы с запущенными приложениями, в моем случае сейчас запущено когда-то очень известное в узких кругах на Голосе приложение ost.js =)
image.png

А команда sudo pm2 monit позволяет нам отслеживать состояние приложений в режиме реального времени. Что-то вроде утилиты htop, только для pm2.

image.png

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

Можно остановить приложение^
sudo pm2 stop same-name
...и в листинге будет указано, что оно в данный момент остановлено:

image.png

И запустить обратно:
sudo pm2 start same-name

А чтобы убрать его из списка, и выгрузить полностью из системы, нужно выполнить:
sudo pm2 delete same-name
И теперь мы видим что в нашем менеджере пусто и никакие приложения не выполняются
(как видно на скрине, у меня в данный момент сервак запущен под рутом, поэтому я не использую sudo, но вы должны будете)

image.png

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

linux
15
153.777 GOLOS
На Golos с April 2019
Комментарии (0)
Сортировать по:
Сначала старые