Гид по технологиям

Управление сервисами в Systemd

5 min read Linux Systemd Обновлено 29 Nov 2025
Управление сервисами в Systemd
Управление сервисами в Systemd

Что такое Systemd?

Systemd — это система инициализации и менеджер сервисов, используемый по умолчанию во многих дистрибутивах Linux: Arch, Debian, Fedora, Red Hat, Ubuntu и других. В простом определении: systemd управляет «units» — объектами, которые представляют сервисы, монтирования, сокеты и устройства. Понятия:

  • unit — объект systemd, обычно с расширением .service, .mount, .socket и т.д.
  • сервис — .service unit, обычно демон или процесс, выполняющий задачу.

Systemd заменил старую систему init (SysV) и предоставляет расширенные возможности оркестрации запуска сервисов, зависимости и логирования.

Important: даже если вы не являетесь поклонником архитектурных решений systemd, знание его базовых команд важно — многие дистрибутивы полагаются на него.

Быстрый пример: утилита hddtemp

Для демонстрации мы используем hddtemp — небольшую утилиту для чтения температуры жесткого диска. Она доступна в репозиториях многих дистрибутивов и поставляется как systemd-сервис.

Установка:

# На Arch Linux
sudo pacman -S hddtemp

# На Debian/Ubuntu
sudo apt-get install hddtemp

Запуск сервиса вручную:

sudo systemctl start hddtemp.service

Примечание: при указании имени можно опустить суффикс .service, то есть sudo systemctl start hddtemp эквивалентен предыдущей команде.

Вы можете остановить или перезапустить сервис теми же командами:

sudo systemctl stop hddtemp
sudo systemctl restart hddtemp

Пример запуска сервиса systemd с индикатором состояния

По умолчанию команды start/stop/restart не выводят текст при успешном выполнении. Чтобы просмотреть состояние сервиса и последние логи:

sudo systemctl status hddtemp
sudo journalctl -u hddtemp --since "1 hour ago"

Команда status покажет: имя сервиса, текущее состояние (active, inactive, failed), последние активизации и ошибки — если такие были.

Включение и отключение автозапуска

Команды start/stop — это ручный запуск для текущей сессии. Если вы хотите, чтобы сервис запускался автоматически при загрузке, используйте enable:

sudo systemctl enable hddtemp

Эта команда создаёт символьную ссылку в каталоге systemd, указывающую, что сервис должен запускаться при загрузке. Чтобы одновременно включить автозапуск и запустить сервис в текущей сессии, используйте флажок –now:

sudo systemctl enable --now hddtemp

Отключить автозапуск:

sudo systemctl disable hddtemp

Проверить, включён ли автозапуск:

sudo systemctl is-enabled hddtemp

Если вам нужно полностью предотвратить запуск сервиса (даже если другие юниты зависят от него), можно «замаскировать» сервис:

sudo systemctl mask hddtemp
sudo systemctl unmask hddtemp

Mask создаёт ссылку на /dev/null и фактически делает запуск сервиса невозможным, пока он замаскирован.

Диагностика и типичные ошибки

Когда systemctl возвращает ошибку или сервис не запускается, последовательность действий для диагностики:

  1. Посмотреть статус сервиса:
sudo systemctl status hddtemp
  1. Посмотреть логи unit через journalctl:
sudo journalctl -u hddtemp --no-pager
  1. Проверить конфигурацию unit-файла:
systemctl cat hddtemp.service
  1. Проверить зависимости и целевые цели:
systemctl list-dependencies hddtemp.service
  1. Для временного запуска в режиме отладки запустите основной исполняемый файл вручную (если известно) и проверьте вывод ошибок.

Когда команда systemctl не выводит ошибок, но сервис всё равно не функционирует, смотрите логи приложения (не только systemd) и права доступа к файлам и сокетам.

Notes: часто причина — неправильная конфигурация unit-файла, отсутствующие зависимости или ошибочные пути в ExecStart.

Безопасность и ограничение прав сервисов

Systemd позволяет жёстко ограничивать окружение сервисов прямо в их unit-файлах. Несколько практических рекомендаций:

  • Используйте User= и Group= для запуска не от root там, где это допустимо.
  • Ограничивайте доступ к файловой системе с помощью ReadOnlyPaths= и InaccessiblePaths=.
  • Включайте PrivateTmp= и NoNewPrivileges= для минимизации поверхности атаки.
  • Для сетевых сервисов используйте systemd socket-активацию или ограничьте Capabilities=.

Эти меры снижают риски при запуске сторонних демонов.

Краткая шпаргалка команд (чек-лист)

  • Запустить: sudo systemctl start
  • Остановить: sudo systemctl stop
  • Перезапустить: sudo systemctl restart
  • Проверить состояние: sudo systemctl status
  • Включить автозапуск: sudo systemctl enable
  • Отключить автозапуск: sudo systemctl disable
  • Включить и запустить сразу: sudo systemctl enable –now
  • Проверить, включён ли: sudo systemctl is-enabled
  • Замаскировать: sudo systemctl mask
  • Посмотреть логи: sudo journalctl -u

Руководство по ролям — что нужно знать разным пользователям

Администратор сервера:

  • Всегда проверяйте статус и логи перед перезапуском production-сервиса.
  • Используйте enable/disable для управления автозапуском.
  • Применяйте ограничения безопасности в unit-файлах.

Десктоп-пользователь:

  • Для локальных демонов достаточно start/stop и is-enabled.
  • Если приложение при установке создало сервис, disable удалит автозапуск.

Разработчик:

  • Используйте systemctl –user для пользовательских юнитов, если нужно запускать сервисы в контексте пользователя.
  • При разработке unit-файлов тестируйте с systemd-analyze verify.

Decision tree для действия с сервисом

flowchart TD
  A[Сервис не работает] --> B{Есть ли ошибки в статусе?}
  B -->|Да| C[Просмотреть journalctl -u unit]
  B -->|Нет| D[Проверить конфигурацию unit: systemctl cat]
  C --> E{Можно исправить быстро?}
  E -->|Да| F[Внести правку и systemctl restart]
  E -->|Нет| G[Откатить к предыдущей рабочей версии или mask]
  D --> F
  G --> H[Связаться с поддержкой/разработчиком]

Критерии приёмки

  • Команда systemctl status показывает active (running) для сервиса после запуска.
  • journalctl не показывает критических ошибок за последние 5 минут после старта.
  • При enable –now сервис запускается и остаётся включённым после перезагрузки.
  • При disable сервис не запускается автоматически после перезагрузки.

Тестовые случаи и приёмка

  1. Установка hddtemp → systemctl start hddtemp → статус active.
  2. enable –now hddtemp → перезагрузка → через systemctl is-enabled hddtemp вывод “enabled” и сервис работает.
  3. mask hddtemp → попытка systemctl start hddtemp должна завершиться ошибкой.

1‑линейный глоссарий

  • unit: базовый объект systemd (service, socket, mount и т.д.).
  • service: unit, запускающий демон или процесс.
  • mask: блокировка запуска unit через ссылку на /dev/null.
  • enable: включение автозапуска при загрузке.

Советы по миграции и совместимости

  • Большинство современных дистрибутивов поставляются с systemd по умолчанию; отличия между ними касаются путей к unit-файлам и менеджмента пакетов.
  • Для пользовательских юнитов используйте каталог ~/.config/systemd/user.
  • Если администрируемая система старая и использует SysV, возможно потребуется изучить совместимость скриптов init.

Итог

Команды systemctl для запуска, остановки, включения и отключения сервисов — основные инструменты управления программами в Linux-системах с systemd. Освоив их, вы сможете управлять демонами, настраивать автозапуск, проводить диагностику и повышать безопасность сервисов.

Summary: попрактикуйтесь на безопасных примерах (например, hddtemp), используйте журнал systemd для диагностики и применяйте встроенные меры ограничения прав для повышения безопасности систем.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

HydraPaper — разный фон на каждом мониторе
Linux

HydraPaper — разный фон на каждом мониторе

Исправить ошибку 0x80070070 — недостаточно места
Windows

Исправить ошибку 0x80070070 — недостаточно места

Добавить текстуру к тексту в Photoshop
Дизайн

Добавить текстуру к тексту в Photoshop

Как очистить и продезинфицировать пульт от телевизора
Домашняя гигиена

Как очистить и продезинфицировать пульт от телевизора

Включить NumLock при запуске Windows 10
Windows

Включить NumLock при запуске Windows 10

Включить Emoji 15 на Windows 11
Windows

Включить Emoji 15 на Windows 11