Современные операционные системы семейства Linux построены по модульному принципу: каждый компонент выполняет свою задачу и может быть перезапущен или отключён независимо от других. Один из ключевых элементов этой архитектуры — системные службы (services). Именно они отвечают за корректную работу сетевых соединений, баз данных, веб-серверов, системных журналов, процессов автоматического обновления и многих других подсистем. Управление этими службами — важнейшая задача системного администратора. Для этого используется специальный инструмент — systemctl
, входящий в состав системы инициализации systemd
.
Понятие системных служб
Службы в Linux — это фоновые процессы, которые запускаются без участия пользователя и выполняют определённые задачи, часто начиная свою работу уже при загрузке системы. Эти процессы также называют демонами, от английского «daemon». Названия таких программ часто оканчиваются на «d» — например, sshd
, nginx
, mysqld
.
Каждая служба обычно представлена единичным unit-файлом с расширением .service
, в котором описано, как и когда её запускать, какие зависимости учесть, какие действия предпринять в случае сбоя. Эти unit-файлы располагаются в директориях /etc/systemd/system/
, /lib/systemd/system/
и других, в зависимости от дистрибутива.
Службы могут быть активными, неактивными, временно остановленными или включёнными для автозапуска при старте системы. Управление всем этим осуществляется через systemctl
— мощную утилиту, которая взаимодействует напрямую с systemd
.
Что такое systemd и почему systemctl — ключевой инструмент
systemd
— это система инициализации и управления сервисами, которая пришла на смену более старым init-системам вроде SysVinit и Upstart. Она запускается первой после загрузчика и отвечает за старт всех остальных служб. systemd
обеспечивает параллельную загрузку, контроль зависимостей между службами, логирование и многое другое. Большинство современных дистрибутивов Linux, таких как Ubuntu (с версии 15.04), Debian, Fedora, CentOS, Arch Linux, используют именно systemd
в качестве основной init-системы.
systemctl
— это основной интерфейс для взаимодействия с systemd
. С помощью этой команды администратор может запускать, останавливать, перезапускать службы, включать или отключать их автозагрузку, проверять их статус и просматривать логи.
Основные команды systemctl
Чтобы эффективно управлять службами, достаточно освоить несколько основных команд systemctl
. Ниже приведены ключевые действия, которые можно выполнять с помощью этой утилиты.
Проверка статуса службы
Команда:
Позволяет узнать, активна ли служба, когда она была запущена, каков её текущий PID (идентификатор процесса), были ли ошибки при старте. Вывод команды также содержит путь к unit-файлу и журнал последних сообщений, связанных с этой службой.
Запуск и остановка службы
Если необходимо вручную запустить службу, используется команда:
Аналогично, для её остановки:
Эти действия не влияют на автозагрузку — при следующем запуске системы служба останется в том же состоянии, что и до перезагрузки.
Перезапуск и перезагрузка конфигурации
Иногда изменения в конфигурационных файлах требуют перезапуска службы. Это делается командой:
Если же необходимо лишь перечитать конфигурацию без полной остановки, используйте:
Эта команда применима не ко всем службам — только к тем, которые умеют обрабатывать сигнал перезагрузки конфигурации.
Управление автозапуском
Чтобы включить автоматический запуск службы при старте системы, используется команда:
Отключить автозапуск можно с помощью:
Стоит отметить, что включение автозапуска не запускает службу немедленно — она стартует только при следующей загрузке. Для запуска прямо сейчас и включения автозапуска одновременно существует команда:
Просмотр всех служб
Для получения списка всех служб можно использовать команду:
По умолчанию отображаются только активные. Чтобы увидеть и неактивные, добавьте флаг --all
.
Журнал работы службы
Благодаря интеграции с journald
(системой логирования в рамках systemd
), можно посмотреть события, связанные с конкретной службой:
Добавьте ключ -f
, чтобы следить за логом в реальном времени, как с помощью tail -f
.
Создание и редактирование служб
В некоторых случаях администратор или разработчик создаёт собственную службу — например, для запуска веб-приложения или фонового скрипта. Для этого создаётся unit-файл в /etc/systemd/system/
с расширением .service
. Пример простейшего unit-файла:
После сохранения такого файла необходимо выполнить команды:
Таким образом, можно запускать любые пользовательские приложения в виде системных служб.
Заключение
Системные службы — основа стабильной работы Linux-системы. Они обеспечивают работу как ключевых компонентов системы, так и прикладных программ. Утилита systemctl
предоставляет мощный, но при этом удобный интерфейс для их контроля. Знание основных команд systemctl
даёт возможность администрировать сервер или рабочую станцию на более глубоком уровне, решать возникающие проблемы быстрее и автоматизировать управление системой.