Перейти к содержимому

Автозапуск приложения (systemd)

Если запустить приложение просто в терминале, оно остановится после закрытия SSH-сессии или перезагрузки сервера. systemd решает эту задачу: он держит сервис запущенным, перезапускает его после падения и стартует автоматически при загрузке VDS.

Создайте файл /etc/systemd/system/myapp.service:

[Unit]
Description=My Application
After=network.target
[Service]
Type=simple
User=www-data
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/node /opt/myapp/index.js
Restart=always
RestartSec=5
Environment=NODE_ENV=production
[Install]
WantedBy=multi-user.target

Разбор ключевых полей:

ПолеНазначение
ExecStartполная команда запуска (абсолютные пути)
WorkingDirectoryрабочая директория процесса
Userот чьего имени запускать (не обязательно root)
Restart=alwaysперезапуск при любом завершении
RestartSecпауза перед перезапуском, секунды
Environmentпеременные окружения

Перечитайте конфигурацию systemd, включите автозапуск и стартуйте службу:

Окно терминала
systemctl daemon-reload
systemctl enable --now myapp

Проверьте состояние:

Окно терминала
systemctl status myapp

Весь вывод приложения (stdout/stderr) автоматически попадает в журнал systemd:

Окно терминала
journalctl -u myapp -f

Флаг -f показывает логи в реальном времени. Последние 100 строк:

Окно терминала
journalctl -u myapp -n 100
Окно терминала
systemctl restart myapp # перезапустить
systemctl stop myapp # остановить
systemctl disable myapp # убрать из автозагрузки