Задать вопрос
Все статьи / Полезная информация / Как управлять службами в systemd с помощью systemctl
Найти результаты:
Период:
с:
 
по:
Помощь в поиске

Помощь в поиске

apple banana
Найти записи, которые содержат хотя бы одно из двух слов.

+apple +juice
Найти записи, которые содержат оба слова.

+apple macintosh
Найти записи, которые содержат слово 'apple', но положение записей выше, если они также содержат 'macintosh'.

+apple -macintosh
Найти записи, которые содержат слово 'apple', но не 'macintosh'.

+apple ~macintosh
Найти записи, которые содержат слово 'apple', но если запись также содержит слово 'macintosh', rate it lower than if row does not. Это более "мягкий" чем поиск '+apple -macintosh', для которого наличие 'macintosh' вызывает что записи не будут возвращены вовсе.

+apple +(>turnover <strudel)
Найти записи, которые содержат слова 'apple' и 'turnover', или 'apple' и 'strudel' (в любом порядке), но ранг 'apple turnover' выше чем 'apple strudel'.

apple*
Найти записи, которые содержат такие слова как 'apple', 'apples', 'applesauce', или 'applet'.

"some words"
Найти записи, которые содержат точную фразу 'some words' (например записи содержащие 'some words of wisdom', но не "some noise words").

Как управлять службами в systemd с помощью systemctl

В современных Linux-системах управление службами – одна из ключевых задач системного администрирования. От корректной работы сервисов зависят стабильность системы, доступность сетевых ресурсов и выполнение критически важных процессов.

На смену традиционным системам инициализации (SysVinit, Upstart) пришел systemd – современный менеджер служб, ставший стандартом для большинства дистрибутивов Linux. Его ключевой инструмент – утилита systemctl, которая предоставляет унифицированный интерфейс для управления сервисами, демонами и системными ресурсами.

systemctl позволяет:

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

Архитектура и компоненты systemd

При работе со службами systemd оперирует не процессами напрямую, а юнитами. 

Юнит – это текстовое описание объекта, которым управляет система инициализации: службы, точки монтирования, таймера, устройства и т.д. Внутри такого файла задается, что запускать, в каком порядке и при каких условиях, а также какие действия выполнить до старта и после остановки.

Все юниты распределены по каталогам в зависимости от того, кто и как их создал:

  • /usr/lib/systemd/system – стандартные юниты, установленные вместе с пакетами. Здесь находятся, например, описания веб-серверов вроде Apache или Nginx.
  • /run/systemd/system – временные юниты, создаваемые во время работы системы. После перезагрузки они исчезают.
  • /etc/systemd/system – пользовательские и переопределенные юниты, которые добавляет или изменяет администратор.

Приоритет всегда остается за /etc/systemd/system: если там есть юнит с тем же именем, он перекрывает остальные.
Чтобы просмотреть все активные юниты, выполните команду:

systemctl

Она выводит таблицу со всеми запущенными объектами. Основные столбцы в этом списке:

  • UNIT – имя юнита;
  • LOAD – загружен ли файл конфигурации (loaded, not-found и др.);
  • ACTIVE – общее состояние юнита (active, inactive, failed и т.п.);
  • SUB – уточненный статус;
  • DESCRIPTION – краткое назначение.

Тип юнита определяется расширением файла. Каждый тип отвечает за свою задачу в системе:

Тип юнита Назначение
.service Описывает службу или приложение и правила его запуска, остановки и перезапуска
.socket Настраивает сокеты для активации сервисов по запросу
.device Представляет устройства, обнаруженные системой, и позволяет учитывать их состояние
.mount Определяет точки монтирования файловых систем
.automount Обеспечивает автоматическое монтирование при обращении к ресурсу
.swap Описывает разделы или файлы подкачки
.target Объединяет несколько юнитов в логическую цель загрузки или работы системы
.timer Отвечает за отложенный или периодический запуск задач (аналог cron)
.snapshot Сохраняет текущее состояние активных юнитов для последующего восстановления
.slice Задает ограничения ресурсов для групп процессов
.scope Создается systemd автоматически для процессов, запущенных вне его прямого управления

Основные команды systemctl для работы со службами

В повседневной работе администратор чаще всего взаимодействует с юнитами типа .service – системными службами. С помощью systemctl ими можно управлять вручную и настраивать их поведение при загрузке системы.

Просмотр списка служб

Чтобы вывести список активных служб, используйте команду:

systemctl list-units --type=service

По умолчанию она показывает только активные службы – те, которые запущены в текущий момент. Если нужно увидеть все службы, включая остановленные и те, которые не удалось запустить, добавьте параметр --all:

systemctl list-units --type=service --all

При выполнении команд суффикс .service указывать необязательно. Если имя юнита указано без суффикса, systemd автоматически интерпретирует его как службу.

Запуск служб

Чтобы запустить службу в текущем сеансе, используется команда start. Например, чтобы запустить службу планировщика заданий, выполните:

sudo systemctl start crond

Остановка служб

Чтобы остановить работающую службу, применяется команда stop. Она завершает работу сервиса до следующего запуска или перезагрузки системы.

Пример остановки той же службы:

sudo systemctl stop crond

Как и в случае с запуском, команда stop действует только в рамках текущего сеанса и не влияет на настройки автозагрузки.

Перезапуск служб

При изменении конфигурационных файлов службы требуется применить новые настройки, чтобы они начали использоваться системой. В зависимости от возможностей конкретного сервиса systemd предлагает несколько вариантов.

Полный перезапуск службы выполняется командой restart:

sudo systemctl restart sshd

В этом случае служба останавливается и запускается заново, что гарантированно применяет все изменения, но может привести к кратковременному разрыву соединений.

Некоторые службы поддерживают перечитывание конфигурации без полной остановки. Для этого используется команда reload:

sudo systemctl reload sshd

Если нет уверенности, поддерживает ли служба «мягкую» перезагрузку конфигурации, можно воспользоваться универсальной командой:

sudo systemctl reload-or-restart sshd

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

Включение и отключение автозагрузки

Systemd может запускать службы автоматически при загрузке системы. За это отвечают команды enable и disable.

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

sudo systemctl enable chronyd

Чтобы убрать службу из автозагрузки, используйте:

sudo systemctl disable chronyd

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

Работа с юнитами systemd

Помимо запуска и остановки, systemctl позволяет глубже изучать и контролировать юниты systemd: смотреть их конфигурацию, зависимости, свойства и при необходимости полностью блокировать их использование.

Просмотр конфигурации юнита

Чтобы посмотреть содержимое файла юнита, используется команда cat. Она выводит тот файл, с которым сейчас работает systemd, включая все переопределения:

sudo systemctl cat chronyd.service

Зависимости юнитов

Юниты systemd часто зависят друг от друга: один модуль может запускаться только после другого или, наоборот, запускать дополнительные компоненты.

Чтобы посмотреть зависимости юнита, используется команда:

systemctl list-dependencies chronyd.service

Если нужно узнать, какие юниты зависят от указанного, применяется флаг --reverse:

systemctl list-dependencies chronyd.service --reverse

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

Просмотр свойств юнита

Для получения детальной информации о юните применяется команда show. Она выводит список свойств в формате ключ=значение: 

sudo systemctl show rsyslog.service

Если нужно получить значение одного конкретного свойства, его можно указать через параметр -p:

sudo systemctl show rsyslog.service -p ExecStart

Маскировка юнитов

Systemd позволяет не просто отключить автозагрузку службы, но и полностью запретить ее запуск – это называется маскировкой.

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

sudo systemctl mask bluetooth.service

После этого служба не сможет быть запущена вручную или автоматически. При попытке запуска systemd вернет ошибку.

Чтобы снять маскировку, пропишите:

sudo systemctl unmask bluetooth.service 

Маскировка применяется в ситуациях, когда модуль нужно гарантированно исключить из работы системы.

Мониторинг работы служб

Если служба в systemd работает неправильно – не запускается, внезапно останавливается или ведет себя нестабильно – первым делом нужно посмотреть логи и воспользоваться инструментами диагностики. Они помогут разобраться в причине проблемы и понять, что пошло не так.

Просмотр логов служб

Для просмотра сообщений службы используется команда journalctl. Она показывает записи журнала, которые systemd сохранил для конкретного сервиса.

Чтобы увидеть все логи службы, выполните:

sudo journalctl -u sshd.service

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

sudo journalctl -u sshd.service -n 30

Чтобы просмотреть логи в реальном времени, используется:

sudo journalctl -u sshd.service -f

Этот режим особенно удобен, если необходимо в реальном времени отслеживать сообщения службы – например, во время ее запуска или перезапуска. Вы сразу видите все выводимые логи, что позволяет оперативно замечать ошибки и анализировать поведение службы по мере ее инициализации.

Анализ ошибок запуска

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

sudo systemctl status sshd

Команда показывает текущее состояние службы, причину сбоя и последние сообщения журнала. Часто этой информации достаточно, чтобы понять, в чем проблема.

Для просмотра только сообщений об ошибках можно использовать журнал:

sudo journalctl -u sshd.service -p err

Проверка состояния службы

Чтобы узнать, работает ли служба и нет ли с ней проблем, используется команда status:

sudo systemctl status sshd

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

Для более простых проверок можно использовать отдельные команды:

  • is-active – проверяет, запущена ли служба;
  • is-enabled – показывает, включена ли служба в автозагрузке;
  • is-failed – сообщает, завершилась ли служба с ошибкой.

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

Управление состояниями системы через цели systemd

В systemd важную роль играют цели – специальные юниты с расширением .target. Они описывают состояние системы и объединяют связанные между собой модули. 

Цели не запускают процессы напрямую, а определяют, какие компоненты должны быть запущены одновременно. Сами по себе цели ничего не делают – они объединяют другие юниты и задают порядок их запуска.

Например, цель graphical.target отвечает за запуск системы с графическим интерфейсом. Все службы, которые необходимы для работы GUI, привязаны к ней. Если какой-то сервис требует, чтобы графическая среда уже была доступна, он просто указывает эту цель как зависимость.

Systemd позволяет переключаться между целями. При этом запускаются все юниты, связанные с выбранной целью, а остальные останавливаются. 
Перед переключением стоит посмотреть, какие юниты входят в цель и что именно будет затронуто:

sudo systemctl list-dependencies graphical.target

Если список выглядит безопасно, цель можно активировать:

sudo systemctl isolate graphical.target

Система перейдет в режим, который соответствует выбранной цели, и остановит все лишнее.

Для часто используемых сценариев systemd предоставляет готовые команды-ярлыки, чтобы не работать с целями напрямую:

  • systemctl rescue – переводит систему в режим восстановления с минимальным набором служб;
  • systemctl emergency – запускает самый базовый режим для ручного исправления проблем;
  • systemctl poweroff – корректно завершает работу системы;
  • systemctl reboot – перезапускает систему.

Цели позволяют управлять состоянием системы на более высоком уровне, чем отдельные службы, и предлагают удобный способ быстро переключаться между режимами работы

Рекомендации по работе с systemd

  • Начинайте диагностику со статуса и логов. Если служба работает некорректно, сперва проверьте ее текущий статус и просмотрите логи – зачастую причина проблемы сразу становится очевидна.
  • Избегайте перезагрузки системы без необходимости. Чаще всего достаточно перезапустить только проблемную службу или обновить ее конфигурацию – это быстрее и безопаснее.
  • Всегда проверяйте зависимости перед изменениями. Прежде чем отключать или маскировать юнит, выясните, какие другие службы от него зависят. 
  • Используйте маскировку только при крайней необходимости. Маска полностью блокирует возможность запуска службы – даже вручную. Чтобы просто отключить автозагрузку, лучше использовать команду disable.
  • Храните пользовательские настройки в правильном месте. Если нужно изменить поведение стандартного юнита, не редактируйте файлы в /usr/lib/systemd/system. Вместо этого создавайте переопределения в /etc/systemd/system – так вы сохраните исходные файлы и упростите будущие обновления системы.
  • Не пытайтесь поменять все сразу – вносите изменения одно за другим. После каждой правки немного подождите и посмотрите: сработало ли изменение, как теперь ведет себя служба, есть ли странные записи в логах. Если что‑то пошло не так, вы сразу это заметите и сможете быстро исправить. Так гораздо проще, чем потом гадать, какое из десятка изменений вызвало проблему.
  • Избегайте лишних изменений – вносите только то, что действительно необходимо. Так вы уменьшите вероятность неожиданных сбоев и сделаете дальнейшее обслуживание системы проще.
  • Записывайте необычные настройки. Если пришлось внести нетипичные изменения в конфигурацию, обязательно зафиксируйте их в документации. В будущем это сэкономит время при обслуживании системы и поможет быстро передать информацию коллегам.
  • Время от времени пересматривайте настройки служб. Проверьте, все ли текущие конфигурации по-прежнему нужны – возможно, какие-то изменения уже потеряли смысл или их можно сделать эффективнее. 

Заключение

systemctl – это основной инструмент для работы со службами в systemd. С его помощью можно запускать и останавливать сервисы, настраивать автозагрузку, проверять состояние, смотреть логи и разбираться с ошибками – все из одного интерфейса и по понятным правилам.

На практике чаще всего используется ограниченный набор команд – их достаточно для решения большинства задач администрирования:

Команда Действие
systemctl list-units --type=service Посмотреть активные службы
sudo systemctl start имя_службы Запустить службу
sudo systemctl stop имя_службы Остановить службу
sudo systemctl restart имя_службы Перезапустить службу
sudo systemctl reload имя_службы Перечитать конфигурацию
sudo systemctl enable имя_службы Включить автозагрузку
sudo systemctl disable имя_службы Отключить автозагрузку
sudo systemctl status имя_службы Проверить состояние
systemctl is-active имя_службы Проверить, запущена ли служба
journalctl -u имя_службы Посмотреть логи службы
sudo systemctl mask имя_службы Запретить запуск службы

Предыдущая статья
Как узнать версию CentOS
Следующая статья
Как установить Astra Linux