Как и говорилось в предыдущей статье systemd управляет модулями. Модулем может быть служба, сокет, устройство, точка монтирования, точка автоматического монтирования, файл или раздел подкачки, цель запуска, просматриваемый файловый путь, таймер, управляемый systemd и т.д.
Внутри менеджера systemd поведение каждого модуля определяется и настраивается модульным файлом. В этой статье я и хотел подробно остановиться на структуре и синтаксисе таких файлов.
Как я уже говорил модульные файлы находятся в следующих каталогах:
/usr/lib/systemd/system
/usr/systemd/system
/etc/systemd/system
Модульные файлы именуются суффиксом (или расширением), который указывает на тип этого файла. Существуют следующие суффиксы:
.automount - настраивает точку монтирования, которая будет автоматически установлена.
.device - описывает устройство, которое было указано как необходимое для управления systemd.
.path - определяет путь, который может использоваться для активации на основе пути.
.scope- создается автоматически systemd. Используется для управления наборами системных процессов, созданных извне.
.service - Описывает, как управлять службой или приложением на хосте.
.slice - группа иерархически организованных модулей, управляющая системными процессами.
.snapshot – сохраненное состояние менеджера systemd в определенный момент времени. Позволяет восстановить текущее состояние системы после внесения изменений.
.socket - описывает сокет.
.swap – описывает файл подкачки или устройство-подкачки.
.target - используется для обеспечения точек синхронизации для других устройств при загрузке или изменения состояний.
.timer - определяет таймер, который будет управляться systemd для задержки запуска или запланированной активации.
.mount - определяет точку монтирования в системе, которой управляет systemd.
Модульные файлы состоят из разделов. Разделы начинаются с имени раздела в квадратных скобочках "[" и "]". На данный момент определены следующие разделы: [Unit], [Install], [Service], [Socket], [Mount],[Automount], [Swap], [Path], [Timer] и [Slice]. Порядок разделов в модульном файле не имеет значение.
Первый раздел обычно [Unit]. Его обычно используют для определения метаданных и настройки отношения модуля к другим модуля. С помощью этого раздела можно определить общую информацию о модуле и его взаимосвязь с операционной системой.
[Service] - используется для предоставления конфигураций, которые применимы только для служб. Одним из самых важных параметров, является Type, именно на его основе systemd понимает, как правильно управлять этой службой.
[Socket] очень часто встречается в конфигурациях. Многие службы реализацию активации на основе сокетов. Кажджый блок сокета должен иметь соответствующий сервисный модуль, который будет активирован, когда сокет получает активность.
[Mount] - используется в модулях монтирования, которые позволяют управлять точкой монтирования из systemd. Эти модули часто переводятся из файла /etc/fstab.
[Automount] - этот раздел позволяет автоматически устанавливать подключенный модуль .mount при загрузке.
[Swap] - используется для настройки файла подкачка в системе.
[Path] - в этом разделе, указывается путь файловой системы, в которой systemd может отслеживать изменения. Должен существовать еще один блок, который будет активирован, когда определенная активность будет обнаружена по этому пути.
[Timer] - этот раздел используется, в основном, в модулях, предназначенных для планирования задач или работ в определенное время или после определенной задержки. Должен быть предоставлен специальный блок, который будет активирован, когда таймер будет достигнут
[Slice] - этот раздел не имеет специфической конфигурации. Может содержать в себе некоторые параметры управления ресурсами.
[Install] - обычно, последний раздел в модульном файле, в котором описывается поведения модуля, если он включен или выключен.
Для создания модульного файла достаточно писать три раздела [Unit], [Install] и один раздел, соответствующий цели модуля.
Краткое описание параметров каждого раздела подготовил в шпаргалке в телеге https://t.me/crazy_linuxoid/18. Смотрим, разбираемся, задаем вопросы, не стесняемся ) ). А пока про модульные файлы все. В будущем постараюсь разобрать подробнее создание модульного файла, но пока на это катастрофически не хватает времени.