- Quick Start
- Welcome!
- Installation
- Start an app
- Managing processes
- Check status, logs, metrics
- List managed applications
- Display logs
- Terminal Based Dashboard
- pm2.io: Monitoring & Diagnostic Web Interface
- Cluster mode
- Ecosystem File
- Setup startup script
- Restart application on changes
- Updating PM2
- CheatSheet
- What’s next?
- Pm2 node js windows
- Менеджер процессов PM2¶
- Управление процессами¶
- Распределение нагрузки (кластеризация)¶
- Файл ecosystem.config.js¶
- Лимит использования RAM¶
- Детектирование изменений¶
- Используем процесс-менеджмент на максимум. Установка и настройка PM2
- Установка
- Настройка
Quick Start
Welcome!
Welcome to the PM2 Quick Start!
PM2 is a daemon process manager that will help you manage and keep your application online. Getting started with PM2 is straightforward, it is offered as a simple and intuitive CLI, installable via NPM.
Installation
The latest PM2 version is installable with NPM or Yarn:
To install Node.js and NPM you can use NVM
Start an app
The simplest way to start, daemonize and monitor your application is by using this command line:
Or start any other application easily:
Some options you can pass to the CLI:
As you can see many options are available to manage your application with PM2. You will discover them depending on your use case.
Managing processes
Managing application state is simple here are the commands:
Instead of app_name you can pass:
- all to act on all processes
- id to act on a specific process id
Check status, logs, metrics
Now that you have started this application, you can check its status, logs, metrics and even get the online dashboard with pm2.io.
List managed applications
List the status of all application managed by PM2:
Display logs
To display logs in realtime:
To dig in older logs:
Terminal Based Dashboard
Here is a realtime dashboard that fits directly into your terminal:
pm2.io: Monitoring & Diagnostic Web Interface
Web based dashboard, cross servers with diagnostic system:
Cluster mode
For Node.js applications, PM2 includes an automatic load balancer that will share all HTTP[s]/Websocket/TCP/UDP connections between each spawned processes.
To start an application in Cluster mode:
Read more about cluster mode here.
Ecosystem File
You can also create a configuration file, called Ecosystem File, to manage multiple applications. To generate an Ecosystem file:
This will generate and ecosystem.config.js file:
And start it easily:
Read more about application declaration here.
Setup startup script
Restarting PM2 with the processes you manage on server boot/reboot is critical. To solve this, just run this command to generate an active startup script:
And to freeze a process list for automatic respawn:
Read more about startup script generator here.
Restart application on changes
It’s pretty easy with the —watch option:
This will watch & restart the app on any file change from the current directory + all subfolders and it will ignore any changes in the node_modules folder —ignore-watch=»node_modules» .
You can then use pm2 logs to check for restarted app logs.
Updating PM2
We made it simple, there is no breaking change between releases and the procedure is straightforward:
Then update the in-memory PM2 :
CheatSheet
Here are some commands that are worth knowing. Just try them with a sample application or with your current web application on your development machine:
What’s next?
Learn how to declare all your application’s behavior options into a JSON configuration file.
Learn how to do clean stop and restart to increase reliability.
Monitor your production applications with Keymetrics.
Pm2 node js windows
Why this project? I’ve been struggling for days looking for a suitable, reliable and production-ready solution to handle my NodeJS application deployment on Windows Server. I’m using PM2 and I just want my app starts automatically on Windows startup.
After testing different solutions, I’ve decided to create this «How To» tutorial listing solutions I’ve dealt with, considering Pro and Cons for each.
I Hope you run your app on linux platform; if not, maybe this guide could help you.
Note: I will present those solutions using a sample demo app as a reference.
(1) Introducing Demo App
Let’s introduce Demo app. It is build by 3 basic components:
- App1: runs every X msecs logging timestamp in logs\app1.log
- App2: runs every Y msecs logging timestamp in logs\app2.log
- Web: a simple express web app, which logs every request in logs\web.log
App management is done using PM2.
Why an app like that? This is to simulate a basic complexity and avoid the super-simple ‘node index.js’ use case — that’s as easy as useless.
My App basic requirements:
- I want my app to be placed on different drive than C: — as a best practice, app shouldn’t be placed on the same drive of Windows OS. Let’s use D.
- app must have an input parameter, which is «env» in my case. I want, at least, discriminate production against developement, staging, uat, .
- (optional) I would prefer my app to run with a Windows Local user, not Administrative user. (spoiler: I still didn’t find a solution for that)
####Clone, build & run
PM2 allows you to handle you application deployments. It provides several benefits, like for example logs management, automatic restart policies, application monitors, plus other things I’m missing. If you’re not familiar with it, I suggest to have a look at their page.
The key point for PM2 is to setup Windows PM2_HOME at system level. If you miss that, you’ll get troubles. By default, PM2 installation create a PM2 folder in:
We will move it to a brand new folder: c:\etc.pm2
How to do that? Follow these steps:
- Create a new folder c:\etc.pm2 (mkdir /p c:\etc.pm2)
- Create a new PM2_HOME variable (at System level, not User level) and set the value c:\etc.pm2
- Close all your open terminal windows
- Ensure that your PM2_HOME has been set, running echo %PM2_HOME%
How PM2 works? Our new folder will store PM2 relevant files, like PM2 logs (yes, the same you see running pm2 logs), PM2 process pid, the dump that is created when you run pm2 save. I reccomend to run your PM2 commands and check how files change in that folder.
This guide will go though the following options/solutions:
- Using NSSM
- Using pm2-windows-service
Менеджер процессов PM2¶
Для обеспечения непрерывной работоспособности Node.js сервера нужно либо постоянно держать открытой консоль, либо использовать менеджер процессов pm2. Он имеет встроенный балансировщик нагрузки, позволяет следить за потребляемыми ресурсами запущенных процессов, автоматически перезапускать процессы после системного сбоя и т. д.
Менеджер процессов pm2 имеется в репозитории npm и должен быть установлен в системе глобально.
Управление процессами¶
Запуск Node.js сервера с использованием pm2 осуществляется командой start , которой передается путь к главному файлу приложения.
Команда start инициирует запуск приложения в фоновом режиме и добавляет его в список процессов, который можно увидеть выполнив команду ls .
Перечень полей таблицы:
- app name — имя приложения (по умолчанию имя главного файла без расширения), для задания собственного названия используйте при запуске параметр —name : pm2 start app.js —name=custom_app_name
- id — уникальный идентификатор приложения;
- mode — режим, в котором был запущен сервер ( fork или cluster );
- pid — уникальный идентификатор процесса в системе;
- status — статус приложения, может быть launching , online , errored или stopped ;
- restart — количество перезапусков;
- uptime — время, прошедшее с момента запуска приложения;
- cpu — нагрузка на процессор в процентах;
- mem — занимаемая приложением оперативная память.
Для получения более подробной информации о количестве запросов, параметрах запуска процессов и т. д. используйте команду monit .
За перезапуск процесса отвечает команда restart , принимающая имя или идентификатор приложения.
Выполнение restart увеличивает значение одноименного поля в списке процессов применительно к тому из них, для которого была выполнена команда.
Остановка процесса осуществляется командой stop , которой необходимо указать либо название, либо идентификатор приложения.
Выполнение stop останавливает работу приложения, но не удаляет его из списка процессов, статус при этом будет stopped .
Чтобы остановить процесс и удалить его из списка, используйте команду delete .
Посмотреть консольные логи приложения можно командой log . Если для log не указать приложение, то будут выведены логи всех процессов, отсортированные по времени.
Командам restart , stop , delete и log можно передать через пробел сразу несколько процессов для обработки.
Для возможности восстановления и запуска списка процессов в случае перезапуска или непредвиденного сбоя сервера, сохраните текущую конфигурацию на диск выполнив команду save .
После этого сохраненные процессы могут быть запущены следующим образом.
Распределение нагрузки (кластеризация)¶
Запуск приложения в нескольких экземплярах, которые будут распределять между собой поступающие запросы, осуществляется с использованием параметра -i (instances) у команды start , с помощью которого указывается, сколько экземпляров запустить. Создание дополнительных процессов одного и того же приложения называется кластеризацией.
Приведенная команды запускает приложение в двух экземплярах. Помните, что для эффективной работы кластера количество дополнительных процессов не должно превышать количество ядер процессора. Чтобы запустить количество процессов равное количеству ядер, укажите параметру -i значение max .
В данном случае Node.js pm2 самостоятельно определит количество ядер процессора и создаст соответствующее количество дополнительных экземпляров.
Файл ecosystem.config.js¶
Если разработанная вами система состоит из множества приложений, которым к тому же при запуске необходимо указывать массу параметров, то при развертывании на разных серверах этот процесс займет немало времени. Чтобы оптимизировать все это, в pm2 имеется поддержка запуска приложений из конфигурационного файла — ecosystem.config.js .
Чтобы сгенерировать шаблон ecosystem.config.js воспользуйтесь следующей командой.
Теперь в директории, откуда была выполнена команда, должен появиться файл ecosystem.config.js с таким содержимым.
В массиве apps каждый элемент является объектом, описывающим конфигурацию для запуска одного приложения набором параметров. Рассмотрим основные из них:
- name — имя приложения, которое будет отображаться в списке процессов при выполнении команды pm2 list ;
- script — путь к главному файлу приложения, который отвечает за запуск;
- instances — запускает процесс в кластерном режиме, в качестве значения передается количество дополнительных экземпляров;
- disable_logs — если задать true , то логи вестись не будут;
- env — значение переменной среды окружения NODE_ENV в режиме разработки;
- env_production — значение переменной среды окружения NODE_ENV в режиме эксплуатации.
ПС полным списком параметров можно ознакомиться в официальной документации.
Для запуска описанных в ecosystem.config.js приложений, выполните команду start с указанием пути к файлу.
Если вам нужно запустить только одно приложение из описанного массива, укажите параметр —only и значение поля name из конфигурации.
Лимит использования RAM¶
Менеджер процессов Node.js pm2 позволяет настроить перезапуск процесса по достижению использования им указанного объема оперативной памяти. Для этого при запуске приложения необходимо указать параметр —max-memory-restart .
Значение параметра указывается в одном из трех возможных измерений:
Проверка использования процессами оперативной памяти осуществляется pm2 раз в 30 секунд.
Детектирование изменений¶
В pm2 также можно настроить автоматический перезапуск приложения при изменении одного из его файлов. Для этого при старте приложения укажите параметр —watch .
Процесс отслеживания изменений не завершается с остановкой процесса приложения. Чтобы отключить его, при выполнении команды stop также необходимо передать параметр —watch .
Параметр —watch имеет ряд параметров, но их указание возможно только через файл ecosystem.config.js .
Здесь в параметре watch явно указывается, изменений каких директорий необходимо отслеживать. Чтобы исключить из отслеживания определенные директории, имеется параметр ignore_watch . А с помощью watch_delay указывается время в миллисекундах, которое необходимо выждать при перезапуске приложения, прежде чем инициировать процесс детектирования изменений.
Используем процесс-менеджмент на максимум. Установка и настройка PM2
В этой статье я расскажу о самом удобном, на мой взгляд, диспетчере процессов. Покажу, как его установить и настроить свои проекты (например: скрипт для автопостинга, сервис на ReactJS).
PM2 запускает приложения и скрипты в режиме 24/7 и решает проблему с их вылетами путем автоматического перезапуска с сохранением лога. Это решение особенно полезно для тех, кто держит на своем сервере большое количество скриптов и нуждается в их удобном управлении.
Рассмотрим установку и настройку на примере Ubuntu 18.04.
Установка
Так как PM2 написан на Node.js и устанавливается с помощью npm, нужно установить их на свой виртуальный сервер:
Теперь устанавливаем сам диспетчер процессов:
Готово! PM2 на сервере.
Настройка
PM2 в основном предназначен для приложений Node.js, но работает и с остальными языками программирования. Чтобы запустить приложение, используем команды в консоли.
Для остальных языков программирования (на примере Python 3):
Если ваше приложение завершит работу с ошибкой, PM2 автоматически перезапустит его, что очень удобно.
После запуска скриптов и приложений можно посмотреть информацию о них с помощью команды в консоли:
Пример того, что мы увидим:
В таблице показано количество рестартов, потребляемая память и нагрузка на процессор от приложений.
Для удаления, запуска, рестарта и остановки приложений из списка нужно посмотреть порядковый номер (id) процесса в таблице, которую можно вызвать командой, указанной выше, и написать команды в консоли.
Удаление из списка:
Также можно просмотреть логи отдельных приложений. Для этого используем эту команду:
И выбираем свое приложение из списка.
Если вам неудобно следить за логами и запуском приложений через консоль, то это можно делать даже в браузере, установив веб-версию PM2 одной командой:
После этого вводим свои данные для регистрации и переходим по ссылке, которая отобразится в консоли.
Пример того, что мы увидим:
Мы разобрали основные команды менеджера процессов. Удачи в ваших проектах!