Источник: <https://habr.com/ru/companies/infobox/articles/241237/>
##Введение
`Systemd` приносит концепцию юнитов `systemd`. Юниты представлены конфигурационными файлами, размещенными в одной из директорий:
`/usr/lib/systemd/system/` – юниты из установленных пакетов `RPM`.
`/run/systemd/system/` — юниты, созданные в рантайме. Этот каталог приоритетнее каталога с установленными юнитами из пакетов.
`/etc/systemd/system/` — юниты, созданные и управляемые системным администратором. Этот каталог приоритетнее каталога юнитов, созданных в рантайме.
Юниты содержат информацию о системных сервисах, прослушиваемых сокетах, сохраненных снапшотах состояний системы и других обьектах, относящихся к системе инициализации.
Типы юнитов systemd:
```
.service – системный сервис
.target — группа юнитов systemd
.automount – точка автомонтирования файловой системы
.device – файл устройства, распознанного ядром
.mount – точка монтирования файловой системы
.path – файл или директория в файловой системе
.scope – процесс, созданный извне
.slice – группа иерархически организованных юнитов, управляющая системными процессами
.snapshot – сохраненное состояние менеджера systemd
.socket – сокет межпроцессного взаимодействия
.swap – Свап-устройство или свап-файл (файл подкачки)
.timer – таймер systemd
```
## Основные функции systemd в CentOS
- **Активация, основанная на сокетах**. Во время загрузки systemd прослушивает сокеты для всех системных сервисов, поддерживает этот тип активации и передает сокеты этим сервисам сразу после старта сервисов. Это позволяет systemd не только запускать сервисы параллельно, но также дает возможность перезапускать сервисы без потери любых отправленных им сообщений, пока сервисы были недоступны. Соответствующий сокет остается доступным и все сообщения выстраиваются в очередь.
- **Активация, основанная на `D-Bus`.** Системные сервисы, использующие `D–Bus` для межпроцессного взаимодействия, могут быть запущены по требованию, когда клиентское приложение пытается связаться с ними.
- **Активация, основанная на девайсах.** Системные сервисы, поддерживающие активацию, основанную на девайсах, могут быть запущены, когда определенный тип оборудования подключается или становится доступным.
- **Активация, основанная на путях.** Системные сервисы могут поддерживать этот вид активации, если изменяется состояние папки или директории.
- **Снепшоты системных состояний.** Система может сохранять состояние всех юнитов и восстанавливать предыдущее состояние системы.
- **Управление точками монтирования и автомонтирования.** Systemd отслеживает и управляет точками монтирования и автомонтирования.
- **Агрессивная параллелизация `Systemd`** запускает системные сервисы параллельно из-за использования активации, основанной на сокетах. В комбинации с сервисами, поддерживающими активацию по требованию, параллельная активация значительно уменьшает время загрузки системы.
- **Транзакционная логика активации юнитов.** До активации и деактивации юнитов systemd вычисляет их зависимости, создает временную транзакцию и проверяет целостность этой транзакции. Если транзакция нецелостная, `systemd` автоматически пытается исправить ее и удалить не требующиеся задания из нее до формирования сообщения об ошибке.
Обратная совместимость с инициализацией `SysV`. `SystemD` полностью поддерживает скрипты инициализации `SysV`, как описано в спецификации `Linux Standard Base (LSB)`, что упрощает переход на `systemd`.
## Управление сервисами
В предыдущих версиях `CentOS` использовалась `SysV` или `Upstart`. Скрипты инициализации располагались в директории `/etc/rc.d/init.d/`. Такие скрипты обычно писались на `Bash` и позволяли администратору управлять состоянием сервисов и демонов. В `CentOS 7+` скрипты инициализации были заменены сервисными юнитами.
По способу использования сервисные юниты `.service` напоминают скрипты инициализации. Для просмотра, старта, остановки, перезагрузки, включения или выключения системных сервисов используется команда `systemctl`. Команды `service` и `chkconfig` по-прежнему включены в систему, но только по соображениям совместимости.
## Основные команды `systemctl`:
`systemctl start name.service` – запуск сервиса
`systemctl stop name.service` — остановка сервиса
`systemctl restart name.service` — перезапуск сервиса
`systemctl try-restart name.service` — перезапуск сервиса только, если он запущен
`systemctl reload name.service` — перезагрузка конфигурации сервиса
`systemctl status name.service` — проверка, запущен ли сервис с детальным выводом состояния сервиса
`systemctl is-active name.service` — проверка, запущен ли сервис с простым ответом: active или inactive
`systemctl list-units --type service --all` – отображение статуса всех сервисов
`systemctl enable name.service` – активирует сервис (позволяет стартовать во время запуска системы)
`systemctl disable name.service` – деактивирует сервис
`systemctl reenable name.service` – деактивирует сервис и сразу активирует его
`systemctl is–enabled name.service` – проверяет, активирован ли сервис
`systemctl list-unit-files --type service` – отображает все сервисы и проверяет, какие из них активированы
`systemctl mask name.service` – заменяет файл сервиса симлинком на `/dev/null`, делая юнит недоступным для `systemd`
`systemctl unmask name.service` – возвращает файл сервиса, делая юнит доступным для systemd