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

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

31 просмотров

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

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

Это руководство предоставляет полный обзор основных команд systemctl, необходимых для управления состоянием, поведением при запуске и статусом служб в вашей системе Linux. Мы рассмотрим наиболее часто используемые команды для управления жизненным циклом служб и обеспечения стабильности системы.


Понимание systemd и systemctl

systemd — это система инициализации и менеджер служб, используемый большинством основных дистрибутивов Linux (таких как Debian, Ubuntu, CentOS/RHEL, Fedora). Он инициализирует пользовательское пространство и управляет процессами, сеансами и системными службами.

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

Ключевые понятия: Юниты и Цели (Targets)

Хотя эта статья посвящена службам, помните, что systemctl управляет различными юнитами:

  • Сервисные юниты (.service): для управления фоновыми процессами (например, nginx.service).
  • Целевые юниты (.target): для группировки юнитов для представления определенного состояния системы (например, multi-user.target, представляющий типичную серверную среду).

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

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

1. Запуск службы

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

sudo systemctl start <имя_службы>.service
# Пример: Запуск веб-сервера Apache
sudo systemctl start apache2.service

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

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

sudo systemctl stop <имя_службы>.service
# Пример: Остановка службы базы данных MySQL
sudo systemctl stop mariadb.service

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

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

sudo systemctl restart <имя_службы>.service
# Пример: Перезапуск демона SSH
sudo systemctl restart sshd.service

4. Перезагрузка конфигурации

Многие службы поддерживают операцию reload (перезагрузка), которая применяет новые файлы конфигурации без прерывания существующих соединений или полного останова процесса. Это быстрее и менее разрушительно, чем полный перезапуск.

sudo systemctl reload <имя_службы>.service
# Пример: Перезагрузка конфигурации Nginx
sudo systemctl reload nginx.service

Совет: Всегда проверяйте документацию службы. Если служба не поддерживает reload, после изменений конфигурации необходимо использовать restart.


Основные команды для обеспечения постоянства служб (состояние при загрузке)

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

1. Включение службы

Чтобы служба автоматически запускалась после перезагрузки, вы должны включить ее. Это создает необходимые символические ссылки в каталогах конфигурации systemd (/etc/systemd/system/).

sudo systemctl enable <имя_службы>.service
# Пример: Включение автозапуска PostgreSQL при загрузке
sudo systemctl enable postgresql.service

2. Отключение службы

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

sudo systemctl disable <имя_службы>.service
# Пример: Отключение службы Bluetooth на сервере
sudo systemctl disable bluetooth.service

3. Маскировка службы (Радикальный вариант)

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

sudo systemctl mask <имя_службы>.service

# Чтобы отменить маскировку:
sudo systemctl unmask <имя_службы>.service

Проверка статуса и информации о службе

Знание того, запущена ли служба и почему она может сбоить, имеет решающее значение для устранения неполадок.

1. Проверка статуса

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

systemctl status <имя_службы>.service
# Пример: Проверка статуса брандмауэра
systemctl status firewalld.service

Интерпретация вывода:

Обратите внимание на три ключевые строки в выводе:

  • Loaded: Показывает, был ли файл юнита правильно загружен (например, loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)).
  • Active: Показывает текущее состояние во время выполнения (например, active (running) или failed).
  • CGroup: Показывает дерево процессов, связанных со службой.

2. Запрос данных о постоянстве при загрузке

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

systemctl is-enabled <имя_службы>.service
# Вывод будет 'enabled', 'disabled' или 'masked'

3. Просмотр журналов с помощью journalctl

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

Чтобы просмотреть журналы конкретной службы:

# Просмотр всех журналов службы с момента последней перезагрузки
journalctl -u <имя_службы>.service

# Просмотр журналов в режиме реального времени (как tail -f)
journalctl -u <имя_службы>.service -f

# Просмотр журналов со вчерашнего дня
journalctl -u <имя_службы>.service --since "yesterday"

Внимание: Если служба показывает статус failed, journalctl -u <служба> -r (в обратном порядке, показывая сначала новые записи) часто является самым быстрым способом увидеть сообщение об ошибке, вызвавшее сбой.


Управление состоянием системы (цели)

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

1. Просмотр текущего состояния системы

Чтобы увидеть, в какую цель загрузилась система (например, серверная среда или графический рабочий стол):

systemctl get-default

2. Изменение целевой цели загрузки по умолчанию

Если вы настраиваете сервер, который никогда не должен запускать графический интерфейс, вы можете установить целевую цель по умолчанию multi-user.target:

sudo systemctl set-default multi-user.target

3. Перезагрузка и выключение

Хотя команды reboot и shutdown по-прежнему работают, systemctl предоставляет нативный способ выполнения этих действий:

# Немедленная перезагрузка системы
sudo systemctl reboot

# Выключение системы (отключение питания)
sudo systemctl poweroff

Сводка основных команд systemctl

Действие Синтаксис команды Назначение
Запустить сейчас sudo systemctl start name.service Немедленно запускает службу.
Остановить сейчас sudo systemctl stop name.service Завершает работу работающей службы.
Перезапустить sudo systemctl restart name.service Останавливает, а затем запускает службу.
Перезагрузить sudo systemctl reload name.service Применяет изменения конфигурации без простоя (если поддерживается).
Включить sudo systemctl enable name.service Настраивает службу для запуска при загрузке.
Отключить sudo systemctl disable name.service Предотвращает запуск службы при загрузке.
Статус systemctl status name.service Проверяет состояние во время выполнения и последние журналы.
Просмотр журналов journalctl -u name.service Предоставляет доступ к полной истории журнала systemd для службы.

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