Unit в systemd: что это такое и какие бывают типы
Единица, которой управляет systemd: служба, сокет, точка монтирования, таймер, цель. Каждый unit описан текстовым файлом, а тип определяется расширением имени.
Что делает
Единое понятие удобно тем, что все типы ведут себя одинаково: у каждого есть состояние, зависимости, журнал, команды запуска и остановки. Точка монтирования и таймер управляются теми же командами, что и служба.
Файлы ищутся в нескольких каталогах по приоритету: /etc/systemd/system (ваши файлы), /run/systemd/system (временные), /usr/lib/systemd/system (файлы пакетов). Одноимённый файл в более приоритетном каталоге полностью заменяет собой нижний.
Где ставится. Файлы unit лежат в /etc/systemd/system, /run/systemd/system и /usr/lib/systemd/system.
Значения
| Значение | Что происходит |
|---|---|
.service | служба: запускаемый процесс. |
.socket | сокет: адрес прослушивания, активирующий службу. |
.timer | таймер: запуск по расписанию. |
.mount | точка монтирования. |
.automount | монтирование по обращению. |
.path | наблюдение за путём. |
.target | цель: точка синхронизации, группа unit. |
.slice | срез: узел дерева ограничений ресурсов. |
.scope | область: группа процессов, запущенных не systemd. |
.swap | раздел или файл подкачки. |
.device | устройство, о котором сообщило ядро. |
Пример
Просмотр всех unit одного приложения.
systemctl list-units 'myapp*' --all
systemctl list-unit-files 'myapp*'
systemctl cat myapp.service
Первая команда показывает состояния, вторая — файлы и состояние автозапуска, третья — действующее содержимое со всеми переопределениями.
Типичные ошибки
Имя без расширения systemd достраивает до .service: для других типов расширение обязательно.
Файл в /etc/systemd/system полностью заменяет файл пакета, а не дополняет его. Для дополнения нужны drop-in.
Новый файл не виден до systemctl daemon-reload.
Связанные ошибки
- Unit … not found: unit-файл не найденСообщение Unit not found при запуске службы: файла нет, не выполнен daemon-reload, опечатка в имени или не указано расширение.
- Unit file is bad и ошибки разбора unit-файлаsystemd не может разобрать unit-файл: неизвестные параметры, ошибки в секциях, недопустимые значения. Как найти проблемную строку.
- Warning: The unit file … changed on diskПредупреждение о том, что unit-файл изменился на диске: systemd работает со старой версией. Когда нужен daemon-reload.
Рядом стоящие параметры
Источники
- systemd.unit(5)
- Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)