Це стара версія документу!
Systemd
Система systemd — це сучасний менеджер ініціалізації та системних служб, який використовується в більшості сучасних дистрибутивів Linux (Ubuntu, Debian, Fedora, Arch, CentOS та ін.). Його мета — запускати та керувати службами, процесами, монтованими файловими системами, мережевими з’єднаннями, журналами тощо.
🔧 Основи
Що таке unit?
unit — це файл опису об’єкта, яким управляє systemd. Є кілька типів юнітів:
- service – системні служби (*.service)
- socket – сокети (*.socket)
- mount – точки монтування (*.mount)
- timer – планування запуску (*.timer)
- target – групи юнітів (*.target)
- device, path, snapshot, тощо
📂 Де зберігаються unit-файли?
- /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 # Запустити сервіс
⚙️ Основні параметри у [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)
Timer — заміна cron.
Створення пари:
/etc/systemd/system/backup.service /etc/systemd/system/backup.timer
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
📍 Targets (аналог runlevels)
| 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 (може бути відключено)