hostprofi.ru
Подобрать хостинг
Термин·буква S

systemd-unit

краткое определение

Конфигурационный файл systemd, описывающий ресурс — службу, таймер, сокет или точку монтирования.

Systemd-unit — это конфигурационный файл, описывающий ресурс, которым управляет systemd: службу, сокет, устройство, точку монтирования, таймер или группу других unit-ов. Systemd — инициализационная система Linux, заменившая SysV init в большинстве современных дистрибутивов. Каждый unit имеет тип, определяющий его поведение, и набор директив, управляющих жизненным циклом.

Как работает systemd-unit

Unit-файлы хранятся в нескольких директориях: системные — в /lib/systemd/system/ (поставляются пакетами), пользовательские переопределения — в /etc/systemd/system/. Файлы из /etc/ имеют приоритет и позволяют изменять поведение системных unit-ов без правки оригиналов.

Структура unit-файла состоит из секций:

  • [Unit] — описание и зависимости (After=, Requires=, Wants=)
  • [Service] — параметры службы: ExecStart, Restart, User, WorkingDirectory
  • [Install] — как unit включается в цель (WantedBy=multi-user.target)

Пример простого unit-файла для веб-приложения:

[Unit]
Description=My Web App
After=network.target

[Service]
Type=simple
User=www-data
WorkingDirectory=/var/www/myapp
ExecStart=/usr/bin/node server.js
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

После создания файла нужно выполнить systemctl daemon-reload, затем systemctl enable --now myapp.service.

История

Systemd был разработан Леннартом Пёттерингом и впервые выпущен в 2010 году. К 2015 году большинство крупных дистрибутивов — Fedora, Debian, Ubuntu, Arch Linux — перешли на systemd. Переход сопровождался дискуссиями в сообществе: критики указывали на нарушение принципа UNIX «одна программа — одна задача», сторонники — на значительное ускорение загрузки и удобство управления. Сегодня systemd де-факто стандарт для серверных Linux-дистрибутивов.

Типы unit-ов

Systemd поддерживает несколько типов:

  • .service — системные службы (Nginx, MySQL, приложения)
  • .timer — аналог cron, запускает .service по расписанию
  • .socket — socket activation: служба запускается при первом подключении
  • .mount и .automount — точки монтирования файловых систем
  • .target — группы unit-ов (аналог runlevel в SysV)

На что обращать внимание

При создании unit-ов важно правильно указывать зависимости. After= определяет порядок запуска, Requires= — жёсткую зависимость (если зависимость не запустилась — unit тоже не стартует), Wants= — мягкую. Для Docker-сервисов unit должен иметь After=docker.service Requires=docker.service.

Параметр Restart=always с RestartSec=5 обеспечивает автоматический перезапуск при падении — важно для продакшн-служб. Логи службы доступны через journalctl: journalctl -u myapp.service -f. Для мониторинга состояния служб можно использовать systemctl list-units --state=failed — покажет все упавшие unit-ы.

Unit-файлы можно переопределять без редактирования оригиналов: systemctl edit nginx.service создаёт override-файл в /etc/systemd/system/nginx.service.d/override.conf. Это удобно для добавления переменных окружения или изменения таймаутов без риска потерять изменения при обновлении пакета. Ansible и другие инструменты автоматизации умеют создавать unit-файлы как часть деплоя.

Другие термины