unit.примерыPythonNode.jsJavaType и RestartЗащита службы

Unit-файл для Node.js

systemd умеет всё, ради чего обычно ставят pm2: автозапуск, перезапуск при падении, логи.

[Unit]
Description=Node.js web
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=node
WorkingDirectory=/srv/web
Environment=NODE_ENV=production
Environment=PORT=3000
ExecStart=/usr/bin/node /srv/web/server.js
Restart=on-failure
RestartSec=3
TimeoutStopSec=20

[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable --now web
journalctl -u web -f

Node из nvm

Служба не читает .bashrc, поэтому команды node из nvm для неё нет. Узнайте полный путь и подставьте его:

which node
# /home/deploy/.nvm/versions/node/v22.11.0/bin/node

Минус — путь меняется при смене версии. Надёжнее поставить Node из пакетов дистрибутива или NodeSource, тогда путь всегда /usr/bin/node. Почему в ExecStart= нужен именно абсолютный путь и что ещё туда можно писать — параметр ExecStart.

pm2 → systemd

pm2systemd
pm2 start server.jssystemctl start web
pm2 startup + pm2 savesystemctl enable web
pm2 logs webjournalctl -u web -f
pm2 restart websystemctl restart web
--max-memory-restart 500MMemoryMax=500M (служба будет убита и перезапущена по Restart=)
кластер -i 4шаблон web@.service и экземпляры web@3001…web@3004
Готовые unit-файлы для своих приложений. Синтаксис примеров проверен systemd-analyze verify на systemd 255. Обновлено 2026-11-04.