Юниты (UNITS) - это такое понятие (скорее, наверное, логическое), которое разделяет все те вещи которыми может управлять systemd на функциональные блоки. Например юниты служб, сокетов, файловых систем, устройств и т.д. Для работы с юнитами systemd использует особые конфигурационные файлы (unit files). Systemd использует эти файлы для конфигурации и управления системными ресурсами, такими как процессы или ваши файловые системы. Используя эти файлы вы заставляете systemd управлять вашей системой так как вам это нужно.
Для каждого юнита есть свой конфигурационный unit file.Эти файлы могут располагаться в нескольких разных местах в системе. Systemd ищет unit files в следующих каталогах:
/etc/systemd/system
/run/systemd/system
/usr/lib/systemd/system
Файлы в более высоком в иерархии каталоге имеют приоритет над низшими. Предпочтительно создавать и редактировать файлы в /etc так как там в основном сосредоточены все настройки в системе. Опасайтесь помещать и редактировать юнит-файлы в /usr поскольку в этот каталог система инсталлирует данные пакетов которые не желательно менять.
Systemd может быть запущен и в контексте конкретного пользователя и управлять его ресурсами. Unit-files для пользователя находятся в каталогах
/etc/systemd/user
/run/systemd/user
/usr/lib/systemd/user.
Приоритет каталогов такой-же как описано выше.
Для просмотра всех юнит-файлов установленных в системе, иначе говоря для того чтобы вывести список всех юнитов имеющихся в системе, используем команду
systemctl list-unit-files
Каждый юнит-файл содержит опции вида OptionName=value. Все опции разбиты по секциям. Синтаксис секций следующий [SectionName]
Два основных и наиболее общих для всех пользователей юнита - это service и target.
Чтобы посмотреть юнит-файлы относящиеся к определенному юниту, надо дать команду
systemctl list-unit-files --type service
systemctl list-unit-files --type target
Общий синтаксис команд таков:
sudo systemctl [command] NAME.OF.UNIT
Наиболее распространенными [command] являются start, stop, status,restart,enable,disable
Например, чтобы посмотреть статус юнита rsyslog.service даем команду systemctl status rsyslog.service
Для юнита nfs-client.target команда systemctl status nfs-client.target
Для более глубокого понимания как устроены юнит-файлы и как их писать смотри man systemd.unit
Существует также детальная информация для типов юнитов service и target
man systemd.service
man systemd.target
В конфигурационных файлах systemd можно найти строки содержащие описание зависимостей, то есть, например, один юнит может потребовать для своей работы чтобы работал какой-либо другой юнит. Между юнитами существуют зависимости двух видов. Один юнит может "хотеть" (want) или "требовать" (require) другой юнит.
Когда U1 запущен, U2 тоже успешно запустится. Если U2 сбойнет, то это не влияет на работу U1
Когда U1 запущен, U2 тоже успешно запустится. Но если U2 сбойнет, то U1 прекратит работу, даже если группа процессов U1 и работала нормально.
В этих примерах U1 и U2 стартуют в одно и то же время. Важно понимать что в systemd "зависимости" и "последовательность запуска" - это разные вещи. За последовательность запуска отвечают опции Before и After.
U1 будет выполняться до старта U2
U2 будет выполняться до старта U1
Если нужна информация о том как systemd контролирует и управляет процессами, контрольными группами (cgroups) смотри
этот полезный блог