Справочник: systemd

systemctl

КомандаДействие
systemctl start svcЗапустить
systemctl stop svcОстановить
systemctl restart svcПерезапустить
systemctl reload svcПеречитать конфиг (без остановки)
systemctl enable svcВключить автозапуск
systemctl disable svcОтключить автозапуск
systemctl enable --now svcEnable + start
systemctl status svcСтатус и последние логи
systemctl is-active svcactive/inactive
systemctl is-enabled svcenabled/disabled
systemctl daemon-reloadПеречитать unit-файлы (после изменений!)
systemctl list-units --type=serviceЗапущенные сервисы
systemctl list-unit-filesВсе сервисы (enabled/disabled)
systemctl --failedСломанные
systemctl mask svcПолностью заблокировать
systemctl unmask svcРазблокировать

journalctl

КомандаДействие
journalctl -u svcЛоги сервиса
journalctl -u svc -fFollow (реальное время)
journalctl -u svc -n 50Последние 50 строк
journalctl -u svc -p errТолько ошибки
journalctl -bС последней загрузки
journalctl -b -1С предпоследней загрузки
journalctl --since "1h ago"За последний час
journalctl --since todayЗа сегодня
journalctl --disk-usageРазмер журнала
journalctl --vacuum-size=500MОграничить размер
journalctl --vacuum-time=2weeksУдалить старше 2 недель

Приоритеты (journalctl -p)

ПриоритетУровеньОписание
0emergСистема неработоспособна
1alertТребуется немедленное действие
2critКритическая ошибка
3errОшибка
4warningПредупреждение
5noticeВажное уведомление
6infoИнформация
7debugОтладка

Шаблон service-файла

# /etc/systemd/system/myapp.service
[Unit]
Description=My Application
After=network.target
Wants=postgresql.service
 
[Service]
Type=simple                    # simple | forking | oneshot | notify
User=app
Group=app
WorkingDirectory=/opt/myapp
Environment=NODE_ENV=production
EnvironmentFile=/opt/myapp/.env
ExecStart=/usr/bin/node server.js
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure             # on-failure | always | on-abnormal | no
RestartSec=5
StandardOutput=journal
StandardError=journal
 
[Install]
WantedBy=multi-user.target

Шаблон timer-файла

# /etc/systemd/system/backup.timer
[Unit]
Description=Daily backup
 
[Timer]
OnCalendar=*-*-* 03:00:00     # ежедневно в 3:00
# OnCalendar=Mon *-*-* 03:00  # каждый понедельник
# OnBootSec=5min               # через 5 минут после загрузки
# OnUnitActiveSec=1h           # каждый час
Persistent=true                # запустить если пропустили
 
[Install]
WantedBy=timers.target
systemctl enable --now backup.timer
systemctl list-timers

Расположение файлов

ПутьОписание
/etc/systemd/system/Ваши юниты (высший приоритет)
/run/systemd/system/Runtime (временные)
/usr/lib/systemd/system/Юниты из пакетов (не редактировать!)

Типы сервисов (Type=)

TypeОписание
simpleExecStart — основной процесс (default)
forkingПроцесс форкается в фон (как nginx)
oneshotЗапускается и завершается (скрипты)
notifyСервис сообщает о готовности через sd_notify