➡️ Ранее рассматривали основные типы юнитов.
🔵А как устроены сами unit-файлы?
Unit-файлы — это простые текстовые файлы в формате, напоминающем ini.
Они хранятся в каталогах:
—
/etc/systemd/system/ — для пользовательских/локальных юнитов (приоритет выше остальных)—
/lib/systemd/system/ — юниты, установленные пакетами—
/run/systemd/system/ — динамически созданные юниты (например, при монтировании)🔵 Общая структура
Каждый unit-файл состоит из секций.
Имя секции заключается в квадратные скобки.
Внутри секции — директивы вида Ключ=Значение. Комментарии начинаются с #.
➡️ Основные секции:
— [Unit] — присутствует во всех юнитах. Содержит описание, зависимости, порядок загрузки.
— [Service] — только для .service юнитов. Определяет, как запускать, контролировать и останавливать процесс.
— [Install] — используется командой systemctl enable. Указывает, в какие таргеты включать юнит.
— Другие специфические секции: [Socket], [Timer], [Mount], [Path] и т.д.
🔵 Остановимся на самой важной — [Unit].
➡️ Основные директивы:
—
Description — понятное имя юнита (отображается в systemctl status).—
Documentation — список URI с документацией (можно указать несколько через пробел).—
After, Before — управление порядком запуска. Например, After=network.target означает, что этот юнит должен запускаться после network.target (но не гарантирует, что сеть готова).—
Requires — жёсткая зависимость: если указанный юнит не запустится, этот тоже не запустится (или будет остановлен).—
Wants — мягкая зависимость: если указанный юнит не запустится, это не помешает запуску текущего.—
Conflicts — если указанный юнит запущен, текущий будет остановлен (и наоборот).—
Condition... и Assert... — проверки перед запуском (например, ConditionPathExists=/etc/myapp.conf).✅ Пример unit-файла
[Unit]
Description=Python Application
Documentation=https://python.appdocs.ru/myapp
After=network.target
Wants=network-online.target
ConditionPathExists=/opt/myapp/app.py
[Service]
Type=simple
User=appuser
ExecStart=/usr/bin/python3 /opt/myapp/app.py
Restart=on-failure
[Install]
WantedBy=multi-user.target
➡️ Где:
—
Description — что это за сервис.—
Documentation — где искать информацию.—
After=network.target — старт после базовой сети.—
Wants=network-online.target — желательно дождаться полной готовности сети (но не критично).—
ConditionPathExists — проверяет наличие файла перед запуском.— Далее идут секции [Service] (параметры запуска) и [Install] (автозагрузка).
Понимание секции [Unit] даёт контроль над тем, когда и при каких условиях запускается ваш сервис. Остальные секции ([Service], [Timer], [Socket] и т.д.) описывают уже конкретную логику работы юнита.
#линуксятина
