Зміст

Systemd

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

🔧 Основи

Що таке unit?

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

📂 Де зберігаються unit-файли?

📋 Перегляд юнітів (сервісів)

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

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  # Змінити рівень запуску

📚 Поради