SystemdDoctor
служба не работает node.js автозапуск

Приложение Node.js не поднимается после перезагрузки

Менеджеры процессов для приложений на Node.js держат свой список запущенного и предлагают создать службу автозапуска. Ошибка возникает, когда служба создана, а список не сохранён: после перезагрузки менеджер стартует пустым. Для сервера чище обойтись обычным unit-файлом.

Вероятные причины

По порядку: сверху то, что встречается чаще.

  1. Список запущенного не сохранён

    Менеджер восстанавливает список из файла. Без сохранения после перезагрузки запускать ему нечего.

  2. Служба автозапуска создана для другого пользователя

    Служба привязана к пользователю, от которого её создавали. Список другого пользователя она не увидит.

  3. Менеджер процессов дублирует работу systemd

    Перезапуск при сбое, журналы, ограничения ресурсов — всё это systemd умеет сам. Второй менеджер добавляет слой без пользы.

Диагностика

Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.

Что менеджер считает запущенным сейчас.

pm2 list

Как выглядит созданная им служба автозапуска.

systemctl cat "pm2-*" 2>/dev/null | head -20

Что происходило при загрузке.

journalctl -u "pm2-*" -b --no-pager | tail -20

Решение

Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.

1. Список запущенного не сохранён
Почему происходит
Менеджер восстанавливает список из файла. Без сохранения после перезагрузки запускать ему нечего.
Как проверить
Посмотрите список и файл сохранения.
pm2 list 2>/dev/null
ls -l ~/.pm2/dump.pm2 2>/dev/null
Как исправить
Сохраните список после изменений. Каждое добавление приложения требует повторного сохранения — это легко забыть.
2. Служба автозапуска создана для другого пользователя
Почему происходит
Служба привязана к пользователю, от которого её создавали. Список другого пользователя она не увидит.
Как проверить
Посмотрите созданную службу и её пользователя.
systemctl cat "pm2-*" 2>/dev/null | grep -E "^(User|Environment|ExecStart)" | head
systemctl is-enabled "pm2-*" 2>/dev/null
Как исправить
Создавайте службу от того пользователя, который запускает приложения, либо явно укажите его домашний каталог в окружении службы.
3. Менеджер процессов дублирует работу systemd
Почему происходит
Перезапуск при сбое, журналы, ограничения ресурсов — всё это systemd умеет сам. Второй менеджер добавляет слой без пользы.
Как проверить
Посмотрите, что делает менеджер помимо запуска.
pm2 describe myapp 2>/dev/null | head -20
Как исправить
Напишите обычный unit-файл: перезапуск задаётся Restart=on-failure, журнал идёт в journalctl, число процессов задаётся приложением. Схема становится прозрачной.

Пример вывода

Служба автозапуска есть, список пуст. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.

systemd[1]: Started pm2-deploy.service - PM2 process manager.
pm2[820]: [PM2] Resurrecting
pm2[820]: [PM2][WARN] No processes saved; DUMP file doesn't exist
systemd[1]: pm2-deploy.service: Deactivated successfully.

Связанные ошибки

Источники

  • Документация PM2: автозапуск документация программы
    сверено 15 сентября 2026
  • systemd.service(5)
    Перезапуск при сбое и автозапуск обычной службы.
    официальная документация, systemd 255
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Воспроизведено созданием службы автозапуска без сохранения списка.
    собственная проверка, systemd 255
    сверено 15 сентября 2026