linux:system:systemd

Systemd

Система systemd — це сучасний менеджер ініціалізації та системних служб, який використовується в більшості сучасних дистрибутивів Linux (Ubuntu, Debian, Fedora, Arch, CentOS та ін.). Його мета — запускати та керувати службами, процесами, монтованими файловими системами, мережевими з’єднаннями, журналами тощо.

unit — це файл опису об’єкта, яким управляє systemd. Є кілька типів юнітів:

  • service – системні служби (*.service)
  • socket – сокети (*.socket)
  • mount – точки монтування (*.mount)
  • timer – планування запуску (*.timer)
  • target – групи юнітів (*.target)
  • device, path, snapshot, тощо
  • /etc/systemd/system/ – для кастомних юнітів (переважно сюди кладеш свої сервіси)
  • /lib/systemd/system/ або /usr/lib/systemd/system/ – системні юніти, що йдуть із пакетами
  • ~/.config/systemd/user/ – юніти користувача (не root)

Усі запущені сервіси:

systemctl list-units --type=service

systemctl list-units --type=service --all

systemctl list-unit-files


</file>

==== 🧪 Інформація про конкретний юніт ====

<code>systemctl status nginx.service

systemctl cat nginx.service

systemctl start example.service     # Запустити
systemctl stop example.service   # Зупинити
systemctl restart example.service   # Перезапустити
systemctl reload example.service    # Перезавантажити конфіг (без повного рестарту)
systemctl enable example.service    # Увімкнути автозапуск
systemctl disable example.service   # Вимкнути автозапуск
systemctl is-enabled example.service # Перевірити автозапуск

Створи файл, наприклад:

sudo nano /etc/systemd/system/myapp.service

[Unit]
Description=MyApp Service
After=network.target

[Service]
ExecStart=/usr/bin/python3 /home/user/myapp.py
WorkingDirectory=/home/user
Restart=always
User=myuser
Environment="ENV_VAR=production"

[Install]
WantedBy=multi-user.target

sudo systemctl daemon-reexec   # Повний перезапуск systemd (рідко треба)
sudo systemctl daemon-reload   # Завантажити нові/змінені юніти
sudo systemctl enable myapp.service  # Увімкнути автозапуск
sudo systemctl start myapp.service   # Запустити сервіс


Параметр Опис
_PARATABLE_INS_ExecStart |_PARATABLE_INS_Команда для запуску
_PARATABLE_INS_ExecStop |_PARATABLE_INS_Команда для зупинки
_PARATABLE_INS_Restart |_PARATABLE_INS_Що робити при аварії (e.g. always, on-failure)
_PARATABLE_INS_User, Group |_PARATABLE_INS_Під яким користувачем запускати
_PARATABLE_INS_WorkingDirectory |_PARATABLE_INS_Робоча директорія
_PARATABLE_INS_Environment= |_PARATABLE_INS_Задання змінних середовища
_PARATABLE_INS_Type= |_PARATABLE_INS_Тип юніту (simple, forking, oneshot, notify, idle)
_PARATABLE_INS_TimeoutSec= |_PARATABLE_INS_Час очікування до примусового завершення

Timer — заміна cron.

/etc/systemd/system/backup.service
/etc/systemd/system/backup.timer

[Unit]
Description=Щоденний бекап

[Timer]
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target

sudo systemctl daemon-reload
sudo systemctl enable --now backup.timer

Журнали зберігає journald.

journalctl -u myapp.service

journalctl -u myapp.service -f

Target Опис
_PARATABLE_INS_graphical.target |_PARATABLE_INS_GUI
_PARATABLE_INS_multi-user.target |_PARATABLE_INS_Консольна (без GUI)
_PARATABLE_INS_rescue.target |_PARATABLE_INS_Однокористувацький режим
_PARATABLE_INS_emergency.target |_PARATABLE_INS_Мінімальний режим (аналог single-user mode)

systemctl reboot   # Перезавантажити систему
systemctl poweroff   # Вимкнути комп'ютер
systemctl get-default    # Поточний target
systemctl set-default multi-user.target  # Змінити рівень запуску

  • Замість cron, краще використовуй systemd-timer
  • Використовуй Restart=always для постійно працюючих сервісів
  • Логи зберігаються в /var/log/journal (може бути відключено)
  • linux/system/systemd.txt
  • Востаннє змінено: 25/06/2025 20:12
  • (зовнішнє редагування)