Главная страница / Блог / Шпаргалка по командам systemctl и systemd в Linux
Linux

Шпаргалка по командам systemctl и systemd в Linux

2 июля 2026 15 минут чтения 2528 просмотров

systemd — это подсистема инициализации и управления службами в Linux. Если говорить проще, она отвечает за запуск системы, управление сервисами, автозагрузку, зависимости между службами и часть фоновых процессов.

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

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

Небольшое отступление. Именно из-за большого количества функций systemd часто критикуют сторонники классического unix-way. По этому принципу одна программа должна выполнять одну задачу, но делать это хорошо. systemd же взял на себя сразу много разных обязанностей, из-за чего споры вокруг него не утихают до сих пор.

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

Что такое unit в systemd

systemd работает не напрямую с «сервисами», а с так называемыми unit-файлами. Unit — это конфигурационный модуль, который описывает службу, таймер, точку монтирования, socket, target или другой системный объект.

Файлы unit-модулей могут находиться в нескольких директориях. Важно понимать их приоритет:

  • /etc/systemd/system/ — пользовательские unit-файлы, созданные или измененные администратором. Имеют самый высокий приоритет;
  • /run/systemd/system/ — временные unit-файлы, созданные динамически во время работы системы;
  • /usr/lib/systemd/system/ — unit-файлы, установленные вместе с пакетами RPM.

Если нужно создать свой сервис или переопределить поведение существующего, обычно работают именно с каталогом /etc/systemd/system/.

Основные типы unit-файлов

systemd поддерживает разные типы unit-файлов. Чаще всего приходится работать с .service и .timer, но полезно знать и остальные.

  • .service — обычная служба, демон или любой процесс, который можно запустить;
  • .target — группа unit-файлов, аналог уровней запуска;
  • .mount — точка монтирования файловой системы;
  • .automount — отложенное монтирование файловой системы при обращении к точке монтирования;
  • .swap — файл или устройство подкачки;
  • .timer — запуск unit-файлов по расписанию, аналог cron;
  • .socket — socket-активация служб, похожая по идее на xinetd;
  • .slice — группировка процессов в дереве cgroups для управления ресурсами;
  • .device — реакция на подключение устройств;
  • .path — запуск unit-файла при событии в файловой системе.
Примечание. cgroups — это механизм Linux для объединения процессов в группы и назначения им ограничений. Например, можно ограничить потребление CPU, памяти или других ресурсов.

Основные возможности systemd

systemd занимается не только запуском сервисов. В него входит довольно много инструментов, которые раньше часто решались отдельными программами.

  • управление системными сервисами;
  • автозагрузка служб;
  • socket-активация сервисов;
  • запуск задач по расписанию через timer-юниты;
  • журналирование через journalctl;
  • анализ скорости загрузки через systemd-analyze;
  • автомонтирование томов и сетевых ресурсов;
  • работа с зависимостями между службами;
  • управление группами процессов через cgroups.

Управление сервисами через systemctl

Для управления службами используется команда systemctl. В старых версиях CentOS часто использовались команды service и chkconfig. В CentOS 7 они еще доступны для совместимости, но основной инструмент — именно systemctl.

При использовании systemctl расширение .service можно не указывать. Например, команды systemctl restart nginx и systemctl restart nginx.service будут работать одинаково.

Запуск сервиса

systemctl start name.service

Остановка сервиса

systemctl stop name.service

Перезапуск сервиса

systemctl restart name.service

Перезапуск только если сервис уже запущен

systemctl try-restart name.service

Перечитать конфигурацию сервиса без полного перезапуска

systemctl reload name.service

Команда reload сработает только в том случае, если сам сервис поддерживает перечитывание конфигурации без перезапуска.

Проверить состояние сервиса

systemctl status name.service

Проверить, запущен ли сервис

systemctl is-active name.service

В ответ будет выведено простое состояние, например active или inactive.

Показать все сервисы

systemctl list-units --type service --all

Автозагрузка сервисов

Отдельно стоит различать запуск сервиса сейчас и добавление его в автозагрузку. Команда start запускает службу только в текущий момент, а enable включает ее автоматический запуск при старте системы.

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

systemctl enable name.service

Отключить автозагрузку сервиса

systemctl disable name.service

Переустановить автозагрузку сервиса

systemctl reenable name.service

Команда сначала отключает сервис из автозагрузки, а затем включает его снова. Это бывает полезно после изменения секции [Install] в unit-файле.

Проверить, включена ли автозагрузка

systemctl is-enabled name.service

Показать все unit-файлы сервисов

systemctl list-unit-files --type service

Mask и unmask: полное отключение сервиса

Команда disable отключает автозагрузку, но не запрещает запуск сервиса вручную или как зависимости другого unit-файла.

Если нужно полностью запретить запуск сервиса, используется mask.

systemctl mask name.service

Эта команда создает символическую ссылку на /dev/null в каталоге /etc/systemd/system. Так как этот каталог имеет самый высокий приоритет, systemd считает unit недоступным.

Чтобы вернуть сервис обратно:

systemctl unmask name.service
Важно. Даже если сервис отключен из автозагрузки через disable, он все равно может быть запущен как зависимость другого сервиса. Если нужно запретить запуск полностью — используйте mask.

Управление systemd на удаленной машине

systemd позволяет управлять сервисами на удаленной машине по SSH.

systemctl --host user_name@host_name command

Где user_name — имя пользователя, host_name — адрес удаленного сервера, а command — команда systemd, которую нужно выполнить.

Например:

systemctl --host root@example.com status nginx

Просмотр логов через journalctl

После проверки статуса сервиса часто нужно посмотреть его логи. Для этого используется journalctl.

Логи конкретного сервиса

journalctl -u name.service

Следить за логами в реальном времени

journalctl -u name.service -f

Показать последние записи

journalctl -u name.service -n 100

Показать ошибки текущей загрузки

journalctl -xe

Команда journalctl -xe особенно полезна, когда сервис не запускается, но по systemctl status не хватает информации.

Проверка таймеров systemd

Таймеры systemd можно использовать вместо cron. Например, чтобы запускать задачу каждую минуту, каждый час или по конкретному расписанию.

Посмотреть активные таймеры можно командой:

systemctl list-timers

Если нужно показать все таймеры, включая неактивные:

systemctl list-timers --all

Типичный systemd .service

Рассмотрим пример простого service-файла.

[Unit]
Description=Daemon to detect crashing apps
After=syslog.target

[Service]
ExecStart=/usr/sbin/abrtd
Type=forking

[Install]
WantedBy=multi-user.target

Секция [Unit] содержит общую информацию о сервисе. Такая секция есть не только у .service, но и у других типов unit-файлов.

  • Description — человекочитаемое описание сервиса;
  • After — указывает, после каких unit-файлов должен запускаться текущий сервис.

Секция [Service] описывает, что именно делает сервис.

  • ExecStart — команда запуска сервиса;
  • Type — способ, которым сервис сообщает systemd о завершении запуска.

Секция [Install] используется командами systemctl enable и systemctl disable.

  • WantedBy — target, в который будет добавлена ссылка на сервис при включении автозагрузки.

Чтобы создать собственный сервис, поместите файл в каталог:

/etc/systemd/system/name.service

После создания или изменения unit-файла необходимо выполнить:

systemctl daemon-reload

Эта команда заставит systemd перечитать unit-файлы и увидеть новые изменения.

Проверка unit-файла

Перед запуском нового сервиса полезно проверить unit-файл на ошибки:

systemd-analyze verify /etc/systemd/system/name.service

Если ошибок нет, можно запускать сервис:

systemctl start name.service

Просмотр содержимого unit-файла

Unit-файл можно открыть в текстовом редакторе или посмотреть через cat, но удобнее использовать команду systemd:

systemctl cat sshd.service

Так можно быстро посмотреть основной unit-файл и все override-настройки, если они есть.

Зависимости порядка: After и Before

В systemd важно различать зависимости порядка и зависимости требования.

After= и Before= отвечают только за порядок запуска.

  • After=network.target — запускать текущий unit после network.target;
  • Before=nginx.service — запускать текущий unit до nginx.service.
Важно. After= не запускает указанный unit автоматически. Он только говорит systemd: если оба unit-файла запускаются, то текущий должен стартовать после указанного.

Зависимости требования: Wants и Requires

Wants= и Requires= описывают уже не порядок, а само требование наличия другого unit-файла.

Wants= означает мягкую зависимость. systemd попробует запустить указанный unit, но если он завершится ошибкой, текущий unit все равно может продолжить запуск.

Requires= — жесткая зависимость. Если зависимый unit не запустится, запуск текущего unit будет остановлен.

Например, если у sshd.service указан Wants=sshd-keygen.service, systemd попробует запустить генерацию ключей, но не будет блокировать запуск SSH-сервера только из-за ошибки зависимого unit-файла.

Главное правило. Зависимости порядка и зависимости требования не связаны между собой. After= не означает Requires=, а Requires= не задает порядок запуска. Если нужны оба поведения, их нужно указывать отдельно.

Полезные параметры секции Service

В секции [Service] описывается поведение сервиса.

  • ExecStart= — команда запуска;
  • ExecReload= — команда перечитывания конфигурации;
  • Restart= — правило перезапуска сервиса при падении или завершении;
  • KillMode= — способ завершения процесса и его потомков;
  • User= — пользователь, от имени которого запускается сервис;
  • Group= — группа запуска;
  • WorkingDirectory= — рабочая директория;
  • Environment= — переменные окружения.

Например, параметр KillMode=process означает, что сигнал завершения будет отправлен только главному процессу, а что делать с дочерними процессами — уже его ответственность.

Параметр Restart= определяет, когда systemd должен перезапускать сервис. Например, часто используют:

Restart=on-failure

Что делает секция Install

Секция [Install] используется при выполнении команд systemctl enable и systemctl disable.

Например:

systemctl enable sshd.service

При выполнении этой команды systemd создаст символическую ссылку на sshd.service внутри нужного target, например multi-user.target. После этого SSH-сервис будет запускаться при достижении этого target во время загрузки системы.

Override-настройки через systemctl edit

Не всегда нужно редактировать основной unit-файл. Более правильный способ изменить поведение установленного сервиса — создать override-конфигурацию.

systemctl edit name.service

systemd создаст отдельный файл переопределений, а основной unit-файл из пакета останется нетронутым. Это удобно, потому что при обновлении пакета ваши изменения не потеряются.

После изменения override-файла также нужно выполнить:

systemctl daemon-reload

Анализ загрузки системы

systemd умеет показывать, какие сервисы дольше всего запускались при старте системы.

Общее время загрузки

systemd-analyze

Самые медленные сервисы

systemd-analyze blame

Критическая цепочка загрузки

systemd-analyze critical-chain

Эти команды полезны, если сервер долго загружается и нужно понять, какой сервис тормозит старт системы.

Краткая шпаргалка команд systemctl

  • systemctl start name — запустить сервис;
  • systemctl stop name — остановить сервис;
  • systemctl restart name — перезапустить сервис;
  • systemctl reload name — перечитать конфигурацию сервиса;
  • systemctl status name — посмотреть состояние сервиса;
  • systemctl is-active name — проверить, запущен ли сервис;
  • systemctl enable name — добавить сервис в автозагрузку;
  • systemctl disable name — убрать сервис из автозагрузки;
  • systemctl is-enabled name — проверить автозагрузку;
  • systemctl mask name — полностью запретить запуск сервиса;
  • systemctl unmask name — снять запрет запуска;
  • systemctl daemon-reload — перечитать unit-файлы;
  • systemctl cat name — посмотреть unit-файл;
  • systemctl edit name — создать override-настройки;
  • systemctl list-timers — посмотреть таймеры;
  • systemctl list-units --type service --all — показать все сервисы.

Даже если вы редко занимаетесь администрированием Linux, базовые команды systemctl сильно упрощают работу с сервером. Запустить сервис, проверить его состояние, добавить в автозагрузку, посмотреть логи или найти проблему при запуске — все это решается буквально несколькими командами.

systemd часто кажется громоздким, особенно если привыкнуть к старым init-скриптам. Но на практике он дает удобную единую точку управления сервисами, зависимостями, таймерами и журналами. Поэтому знать основы systemd полезно любому разработчику, который хотя бы иногда работает с Linux-серверами.

Комментарии

Будем рады вашему мнению и вопросам по статье.