119 слов | 1 минута

PM2: управление Node.js-процессами

PM2 — менеджер процессов для Node.js-приложений с поддержкой автозапуска, кластеризации и мониторинга.

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

# Запуск приложения
pm2 start server.js

# Список процессов
pm2 ls

# Перезапуск
pm2 restart app

# Остановка
pm2 stop app

# Удаление из списка процессов
pm2 delete app

# Логи (конкретного приложения или всех)
pm2 log app
pm2 log

Поля таблицы pm2 ls

Поле Описание
app name Имя приложения (по умолчанию — имя файла без расширения)
id Уникальный идентификатор приложения
mode Режим запуска: fork или cluster
pid Идентификатор процесса в системе
status Статус: launching, online, errored, stopped
restart Количество перезапусков
uptime Время работы с момента запуска
cpu Нагрузка на процессор, %
mem Используемая оперативная память

Задать имя приложения при запуске:

pm2 start app.js --name=my-app

Файл ecosystem.config.js

Для запуска нескольких приложений с заранее заданными параметрами используется конфигурационный файл.

Сгенерировать шаблон:

pm2 init

Пример ecosystem.config.js:

module.exports = {
    apps: [
        {
            name: 'app',
            script: './app.js',
            env: {
                NODE_ENV: 'development',
            },
            env_production: {
                NODE_ENV: 'production',
            },
        },
    ],
};

Параметры конфигурации

Параметр Описание
name Имя в списке процессов
script Путь к главному файлу приложения
instances Количество экземпляров (кластерный режим)
disable_logs Отключить ведение логов (true/false)
env Переменные окружения для режима разработки
env_production Переменные окружения для production

Запуск из файла конфигурации:

pm2 start ecosystem.config.js

# Запуск только одного приложения из конфига
pm2 start ecosystem.config.js --only my-app

Автоперезапуск при изменении файлов

# Запуск с отслеживанием изменений
pm2 start index.js --watch

# Остановка с отключением отслеживания
pm2 stop index --watch

Тонкая настройка через ecosystem.config.js:

module.exports = {
    apps: [
        {
            name: 'my-app',
            script: './index.js',
            watch: ['server'],            // Отслеживать только папку server/
            ignore_watch: ['node_modules', 'client'],
            watch_delay: 1000,            // Задержка перед перезапуском, мс
        },
    ],
};