PM2


Начало работы

Установка

Последняя версия PM2 устанавливается с помощью NPM или Yarn ``Сценарий оболочки $ npm install pm2@latest -g


ИЛИ
``` сценарий оболочки
$ yarn global add pm2

Запуск приложения

Самый простой способ запуска, демонизации и мониторинга приложения - это использование командной строки ``Сценарий оболочки $ pm2 start app.js


Или можно запустить любое другое приложение простым способом
``` сценарий оболочки
$ pm2 start bashscript.sh
$ pm2 start python-app.py --watch
$ pm2 start binary-file -- --port 1520

Некоторые опции, которые можно передать в CLI

Указать имя приложения ``Сценарий оболочки –name <имя_приложения>


Наблюдение и перезапуск приложения при изменении файлов
``` shell script
--watch

Установка порога памяти для перезагрузки приложения

--max-memory-restart <200MB>

Указать файл журнала

--log <log_path>

Передать дополнительные аргументы скрипту

-- arg1 arg2 arg3

Задержка между автоматическими перезапусками

--restart-delay <задержка в мс>

Префикс журналов с указанием времени

--time

Не производить автоматический перезапуск приложения

--no-autorestart

Указать cron для принудительного перезапуска

--cron <cron_pattern>

Прикрепить к журналу приложения

--no-daemon

Управление процессами

Управление состоянием приложения очень простое, вот команды

$ pm2 restart app_name
$ pm2 reload app_name
$ pm2 stop app_name
$ pm2 delete app_name

Вместо app_name можно передать

  • all для действия на все процессы
  • id для воздействия на определенный идентификатор процесса

Проверка состояния, журналов, метрик

Теперь, когда вы запустили это приложение, вы можете проверить его состояние, журналы, метрики и даже получить онлайн-панель с помощью pm2.io.

Список статусов всех приложений, управляемых PM2 ``Сценарий оболочки $ pm2 [list|ls|status]


Для отображения журналов в реальном времени
``` сценарий оболочки
$ pm2 logs

Чтобы покопаться в старых журналах

$ pm2 logs --lines 200

Вот панель реального времени, которая помещается непосредственно в терминал

$ pm2 monit

Веб-панель, кросс-серверы с системой диагностики ``скрипт оболочки $ pm2 plus



### Кластерный режим
Для Node.js-приложений PM2 включает в себя автоматический балансировщик нагрузки, который будет разделять все HTTP[s]/Websocket/TCP/UDP-соединения между каждым порожденным процессом.

Чтобы запустить приложение в режиме кластера
``Сценарий оболочки
$ pm2 start app.js -i max

Подробнее о кластерном режиме здесь.

Файл экосистемы

Для управления несколькими приложениями можно также создать файл конфигурации, называемый Ecosystem File. Для создания файла Ecosystem ``Сценарий оболочки $ pm2 ecosystem


В результате будет сгенерирован файл ecosystem.config.js

module.exports = { apps : [{ имя: “app”, script: “./app.js”, env: { NODE_ENV: “development” }, env_production: { NODE_ENV: “production”, } }, { имя: ‘worker’, script: ‘worker.js’ }] }


И запустить его легко
``` shell-скрипт
$ pm2 start ecosystem.config.js

Подробнее о декларировании приложений здесь

Настройка сценария запуска

Перезапуск PM2 с управляемыми процессами при загрузке/перезагрузке сервера очень важен. Чтобы решить эту проблему, достаточно выполнить следующую команду для создания активного сценария запуска ``Сценарий оболочки $ pm2 save


Подробнее о генераторе сценариев запуска [здесь](https://pm2.keymetrics.io/docs/usage/startup/)


### Перезапуск приложения при изменениях
Это довольно просто с помощью опции `--watch`.

$ cd /path/to/my/app $ pm2 start env.js –watch –ignore-watch=“node_modules”


Это позволит следить и перезапускать приложение при любом изменении файла из текущего каталога + всех подкаталогов и игнорировать любые изменения в папке node_modules `--ignore-watch="node_modules"`.

После этого можно использовать `pm2 logs` для проверки журналов перезапущенного приложения.

------


### CheatSheet {.row-span-2 .col-span-2}
Здесь приведены некоторые команды, которые стоит знать. Просто попробуйте их выполнить с образцом приложения или со своим текущим веб-приложением на машине разработки

Режим форка
командный сценарий
$ pm2 start app.js --name my-api # Именной процесс

Кластерный режим ‘‘‘сценарий $ pm2 start app.js -i 0 # Будет запущено максимальное количество процессов с LB в зависимости от доступных процессоров $ pm2 start app.js -i max # То же, что и выше, но устаревшее. $ pm2 scale app +3 # Масштабирует app на 3 рабочих $ pm2 scale app 2 # Масштабирование app до 2 рабочих.


Листинг
Шелл-скрипт
$ pm2 list # Отображение состояния всех процессов
$ pm2 jlist # Вывести список процессов в сыром JSON
$ pm2 prettylist # Вывод списка процессов в улучшенном JSON

$ pm2 describe 0 # Вывести всю информацию о конкретном процессе

$ pm2 monit # Мониторинг всех процессов

Журналы командный сценарий $ pm2 logs [–raw] # Отображение журналов всех процессов в потоковом режиме $ pm2 flush # Очистить все файлы журналов $ pm2 reloadLogs # Перезагрузить все журналы


Действия
Шелл-скрипт
$ pm2 stop all # Остановить все процессы
$ pm2 restart all # Перезапустить все процессы

$ pm2 reload all # Перезагрузка в течение 0 с простоя (для СЕТЕВЫХ приложений)

$ pm2 stop 0 # Остановка определенного идентификатора процесса
$ pm2 restart 0 # Перезапуск определенного идентификатора процесса

$ pm2 delete 0 # Удаляет процесс из списка pm2
$ pm2 delete all # Удаление всех процессов из списка pm2

Misc Шелл-скрипт $ pm2 reset # Сброс метаданных (время перезапуска…) $ pm2 updatePM2 # Обновление в памяти pm2 $ pm2 ping # Убедиться, что демон pm2 запущен $ pm2 sendSignal SIGUSR2 my-app # Послать системный сигнал скрипту $ pm2 start app.js –no-daemon $ pm2 start app.js –no-vizion $ pm2 start app.js –no-autorestart



### Обновление PM2
Мы сделали это просто, между релизами нет никаких изменений, и процедура проста
``Основной сценарий
$ npm install pm2@latest -g

Затем обновляем in-memory PM2

$ pm2 update

Также см.