414 слов | 2 минуты
PM2
Управление процессами
Запуск Node.js сервера с использованием pm2 осуществляется командой start, которой передается путь к главному файлу приложения.
pm2 start server.js
Команда start инициирует запуск приложения в фоновом режиме и добавляет его в список процессов, который можно увидеть выполнив команду ls.
pm2 ls
Перечень полей таблицы:
app name- имя приложения (по умолчанию имя главного файла без расширения), для задания собственного названия используйте при запуске параметр-name:pm2 start app.js --name=custom_app_nameid- уникальный идентификатор приложения;mode- режим, в котором был запущен сервер (forkилиcluster);pid- уникальный идентификатор процесса в системе;status- статус приложения, может бытьlaunching,online,erroredилиstopped;restart- количество перезапусков;uptime- время, прошедшее с момента запуска приложения;cpu- нагрузка на процессор в процентах;mem- занимаемая приложением оперативная память.
За перезапуск процесса отвечает команда restart, принимающая имя или идентификатор приложения.
pm2 restart app
Остановка процесса осуществляется командой stop, которой необходимо указать либо название, либо идентификатор приложения.
pm2 stop app
Чтобы остановить процесс и удалить его из списка, используйте команду delete.
pm2 delete app
Посмотреть консольные логи приложения можно командой log. Если для log не указать приложение, то будут выведены логи всех процессов, отсортированные по времени.
pm2 log app
Файл ecosystem.config.js
Если разработанная вами система состоит из множества приложений, которым к тому же при запуске необходимо указывать массу параметров, то при развертывании на разных серверах этот процесс займет немало времени. Чтобы оптимизировать все это, в pm2имеется поддержка запуска приложений из конфигурационного файла - ecosystem.config.js.
Чтобы сгенерировать шаблон ecosystem.config.js воспользуйтесь следующей командой.
pm2 init
Теперь в директории, откуда была выполнена команда, должен появиться файл ecosystem.config.js с таким содержимым.
ecosystem.config.js
module.exports = {
apps: [
{
name: 'app',
script: './app.js',
env: {
NODE_ENV: 'development',
},
env_production: {
NODE_ENV: 'production',
},
},
],
};
В массиве apps каждый элемент является объектом, описывающим конфигурацию для запуска одного приложения набором параметров. Рассмотрим основные из них:
name- имя приложения, которое будет отображаться в списке процессов при выполнении командыpm2 list;script- путь к главному файлу приложения, который отвечает за запуск;instances- запускает процесс в кластерном режиме, в качестве значения передается количество дополнительных экземпляров;disable_logs- если задатьtrue, то логи вестись не будут;env- значение переменной среды окруженияNODE_ENVв режиме разработки;env_production- значение переменной среды окруженияNODE_ENVв режиме эксплуатации.
ПС полным списком параметров можно ознакомиться в официальной документации.
Для запуска описанных в ecosystem.config.js приложений, выполните команду start с указанием пути к файлу.
pm2 start ecosystem.config.js
Если вам нужно запустить только одно приложение из описанного массива, укажите параметр --only и значение поля name из конфигурации.
pm2 start ecosystem.config.js --only my-app
Детектирование изменений
В pm2 также можно настроить автоматический перезапуск приложения при изменении одного из его файлов. Для этого при старте приложения укажите параметр --watch.
pm2 start index.js --watch
Процесс отслеживания изменений не завершается с остановкой процесса приложения. Чтобы отключить его, при выполнении команды stop также необходимо передать параметр --watch.
pm2 stop index --watch
Параметр --watch имеет ряд параметров, но их указание возможно только через файл ecosystem.config.js.
ecosystem.config.js
module.exports = {
apps: [
{
name: 'my-app',
script: './index.js',
watch: ['server'],
ignore_watch: ['node_modules', 'client'],
watch_delay: 1000,
},
],
};
Здесь в параметре watch явно указывается, изменений каких директорий необходимо отслеживать. Чтобы исключить из отслеживания определенные директории, имеется параметр ignore_watch. А с помощью watch_delay указывается время в миллисекундах, которое необходимо выждать при перезапуске приложения, прежде чем инициировать процесс детектирования изменений.