В рамках этой заметки представляю список полезностей для работы c Systemd. Это самая популярная на текущий момент система инициализации, пришедшая на смену SystemV (SysV).
Введение
Система инициализации запускается после первой загрузки ядра, затем запускает все процессы, в работающей системе. С ее помошью можно также запускать различные режимы (runlevels) и управлять/отслеживать работу служб/демонов.
Управление ресурсом системы описывается в Unit - файлах, так называемые конфигурационных файлы для Systemd. Ресурс описывамый в них может быть чем угодно: сервисом, сокетом, устройством, точкой монтирования, таймером и etc..
Юнит-файл определяет:
-
Как запустить службу (через ExecStart),
-
Когда её запускать (через зависимости и WantedBy),
-
Какие действия предпринимать при сбое (Restart, RestartSec),
-
Под каким пользователем и окружением запускать,
-
Что должно быть запущено до или после нее (After, Before).
Unit-файлы
Хранятся юнит-файлы, зависит от дистрибутива, но как правило тут:
-
/usr/lib/systemd/system/
- Системные юниты, установленные пакетами. -
/etc/systemd/system/
- Пользовательские юниты, переопределяющие или добавляющие новые. -
/run/systemd/system/
- Временные юниты (в оперативной памяти).
Юнит-файлы размещенные в
/etc/systemd/system/
имееют наивысший приоритет чем/run
и/usr/lib
.
В качестве примера, ниже табличка с примерами типов юнитов:
Тип файла | Расширение | Назначение |
---|---|---|
service |
.service |
Управление сервисами |
socket |
.socket |
Сокеты (активируют сервисы) |
timer |
.timer |
Планирование задач (аналог cron) |
mount |
.mount |
Монтаж файловых систем |
path |
.path |
Отслеживание файлов/каталогов |
target |
.target |
Группировка юнитов (как runlevel) |
device |
.device |
Устройства |
Но на практике же, самой частой задачей является создаение Systemd юнита для запуска сервиса. Пример конфигурации:
[Unit]
Description=My Happy Java App
After=network.target
[Service]
Type=simple
User=myuser
WorkingDirectory=/opt/myapp
ExecStart=/opt/myapp/start.sh
Restart=on-failure
RestartSec=5
Environment=ENV=production
[Install]
WantedBy=multi-user.target
Директивы:
Description
— описание юнита,After
— юнит будет запущен послеnetwork.target
,Type=simple
— процесс стартует напрямую (безforking
),ExecStart
— команда для запуска,Restart
— перезапуск при сбое,User
— под каким пользователем запускать,Environment
— переменные окружения,WantedBy=multi-user.target
— юнит будет активен в обычном многопользовательском режиме.
Systemctl - команды
Основной инструмент взаимодействия с Systemd — это утилита systemctl. Ниже представленые основные команды, которые могут быть полезны в работе.
Просмотр сервисов
systemctl list-units --type=service --all
— просмотр всех юнитов сервисов в системеsystemctl list-unit-files --type=service
— список установленных юнит-файлов сервисовsystemctl status <name>
— статус юнита и последние логи
Управление сервисами
systemctl start <name>
— запустить сервисsystemctl stop <name>
— остановить сервисsystemctl restart <name>
— перезапустить сервисsystemctl try-restart <name>
— перезапустить, если сервис уже запущенsystemctl reload <name>
— перечитать конфигурацию без остановкиsystemctl daemon-reload
— перечитать конфигурации юнитов (после их изменения)
Автозапуск
systemctl enable <name>
— включить автозапускsystemctl disable <name>
— отключить автозапускsystemctl is-enabled <name>
— проверить, включён ли автозапускsystemctl preset <name>
— сбросить настройки автозапуска к значениям по умолчанию
Проверка статуса
systemctl is-active <name>
— проверка, запущен ли сервисsystemctl is-failed <name>
— проверка, завершился ли сервис с ошибкой
Блокировка запуска
systemctl mask <name>
— запретить запуск сервиса (в том числе вручную)systemctl unmask <name>
— разрешить запуск сервиса
Работа с юнитами
systemctl cat <name>
— показать содержимое юнит-файлаsystemctl edit <name>
— создать кастомный override-файл для юнитаsystemctl edit --full <name>
— отредактировать полный оригинальный юнит-файлsystemctl revert <name>
— сбросить изменения, сделанные черезedit
Режимы системы
systemctl rescue
— перейти в rescue-режим (минимальный многопользовательский режим)systemctl emergency
— перейти в emergency-режим (ещё более минимальный)systemctl default
— вернуться к обычному режиму (multi-user или graphical)
Перезагрузка / Завершение работы
systemctl reboot
— перезагрузить системуsystemctl poweroff
— выключить системуsystemctl halt
— остановить систему (без отключения питания)systemctl suspend
— перевести в спящий режимsystemctl hibernate
— перевести в гибернацию
Заключение
Systemd стал стандартом в большинстве современных дистрибутивов Linux, и умение работать с ним — необходимый навык для любого системного администратора или DevOps-инженера. Понимание структуры юнит-файлов и уверенное владение systemctl
позволяет эффективно управлять службами, автоматизировать задачи и обеспечивать стабильную работу систем.