15%

Сэкономьте 15% на всех хостинговых услугах

Проверьте свои навыки и получите скидку на любой тарифный план

Используйте код:

Skills
Начать
31.10.2024

Команды Systemctl: Как перезагрузить, перезагрузить и остановить сервисы в Linux

Эффективное управление сервисами — один из наиболее критических навыков для любого администратора Linux. Независимо от того, работаете ли вы с высоконагруженным веб-сервером на плане VPS Hosting или поддерживаете окружение Dedicated Server, понимание того, как управлять системными сервисами с помощью systemctl, абсолютно необходимо. Это подробное руководство охватывает всё, что вам нужно знать о перезагрузке, перезагрузке конфигурации и остановке сервисов в Linux с использованием systemd и systemctl.

Что такое systemd и почему это важно?

systemd — это система инициализации и менеджер сервисов по умолчанию, используемые практически во всех современных дистрибутивах Linux, включая Ubuntu, Debian, CentOS, Rocky Linux, AlmaLinux и Fedora. Она заменила более старые системы инициализации, такие как SysVinit и Upstart, внеся значительные улучшения в процесс загрузки Linux и управление процессами.

Ключевые особенности systemd

  • Параллельный запуск сервисов — Значительно сокращает время загрузки благодаря одновременному запуску сервисов
  • Активация сервисов по требованию — Сервисы могут быть запущены только при необходимости, экономя системные ресурсы
  • Управление зависимостями — Автоматически обрабатывает зависимости и порядок запуска сервисов
  • Централизованное логирование — Интегрируется с journald для единого структурированного управления логами
  • Управление ресурсами на основе Cgroup — Отслеживает и ограничивает использование CPU, памяти и I/O для каждого сервиса
  • Активация через сокеты и D-Bus — Обеспечивает продвинутые паттерны межпроцессного взаимодействия

Понимание systemd — это не просто теория, это напрямую влияет на стабильность, производительность и безопасность вашего окружения Linux.

Что такое systemctl?

systemctl — это основной интерфейс командной строки для взаимодействия с systemd. Он позволяет администраторам:

  • Запускать, останавливать, перезагружать и перезагружать конфигурацию сервисов
  • Включать или отключать сервисы при загрузке
  • Проверять статус сервиса и просматривать логи
  • Управлять системными целями (уровнями запуска)
  • Перезагружать конфигурацию демона systemd

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

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

1. Перезагрузка сервиса

Перезагрузка сервиса полностью его останавливает, а затем запускает заново. Это основная операция, когда:

  • Вы внесли изменения в конфигурацию, требующие полной перезагрузки процесса
  • Сервис упал или стал неответчивым
  • Вам нужно применить обновленные бинарные файлы после обновления пакета

Синтаксис:

sudo systemctl restart <service_name>

Пример — Перезагрузка веб-сервера Nginx:

sudo systemctl restart nginx

Пример — Перезагрузка веб-сервера Apache:

sudo systemctl restart apache2

Пример — Перезагрузка базы данных MySQL/MariaDB:

sudo systemctl restart mysql

> Важно: Перезагрузка сервиса вызывает кратковременное прерывание. Для production-окружений рассмотрите использование reload при наличии поддержки, чтобы избежать простоя.

2. Перезагрузка конфигурации сервиса

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

Синтаксис:

sudo systemctl reload <service_name>

Пример — Перезагрузка конфигурации Nginx после редактирования:

sudo systemctl reload nginx

Пример — Перезагрузка демона SSH после изменения sshd_config:

sudo systemctl reload sshd

> Примечание: Не все сервисы поддерживают операцию reload. Если сервис её не реализует, systemctl вернёт ошибку. В таких случаях используйте restart.

Совет — Используйте reload-or-restart для максимальной совместимости:

sudo systemctl reload-or-restart <service_name>

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

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

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

Синтаксис:

sudo systemctl stop <service_name>

Пример — Остановка веб-сервера Nginx:

sudo systemctl stop nginx

Пример — Остановка сервиса брандмауэра:

sudo systemctl stop ufw

> Предупреждение: Остановка критического сервиса (такого как sshd на удалённом сервере) может заблокировать вам доступ к системе. Всегда убедитесь, что у вас есть альтернативный способ доступа, такой как консоль или управление вне диапазона, перед остановкой важных сервисов.

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

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

Синтаксис:

sudo systemctl start <service_name>

Пример:

sudo systemctl start nginx

5. Включение сервиса при загрузке

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

Синтаксис:

sudo systemctl enable <service_name>

Пример:

sudo systemctl enable nginx

Включить и запустить одновременно (рекомендуется):

sudo systemctl enable --now nginx

6. Отключение сервиса при загрузке

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

Синтаксис:

sudo systemctl disable <service_name>

Пример:

sudo systemctl disable bluetooth

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

sudo systemctl disable --now bluetooth

7. Проверка статуса сервиса

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

Синтаксис:

sudo systemctl status <service_name>

Пример — Проверка статуса Nginx:

sudo systemctl status nginx

Пример вывода:

● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2024-01-15 10:23:45 UTC; 2h 34min ago
       Docs: man:nginx(8)
    Process: 1234 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 1235 (nginx)
      Tasks: 3 (limit: 4915)
     Memory: 6.2M
        CPU: 45ms
     CGroup: /system.slice/nginx.service
             ├─1235 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
             └─1236 "nginx: worker process"

Вывод включает:

  • Loaded — Загружен ли файл unit и включён ли он при загрузке
  • Active — Текущее состояние работы (active (running), inactive (dead), failed, и т.д.)
  • Main PID — Основной ID процесса сервиса
  • Memory/CPU — Метрики потребления ресурсов
  • CGroup — Иерархия контрольной группы
  • Recent logs — Последние записи журнала для быстрой диагностики

Продвинутые команды systemctl

Проверка активности или включения сервиса

Для использования в скриптах и автоматизации эти команды возвращают простые коды выхода в стиле boolean:

# Check if a service is currently running
systemctl is-active nginx

# Check if a service is enabled at boot
systemctl is-enabled nginx

# Check if a service has failed
systemctl is-failed nginx

Список всех сервисов

# List all loaded and active units
systemctl list-units --type=service

# List all installed unit files and their states
systemctl list-unit-files --type=service

# List only failed services
systemctl --failed

Перезагрузка демона systemd

После создания или изменения файлов unit вы должны перезагрузить демон systemd для распознавания изменений:

sudo systemctl daemon-reload

Маскирование и размаскирование сервиса

Маскирование сервиса предотвращает его запуск вручную или автоматически — даже другими сервисами:

# Prevent a service from ever starting
sudo systemctl mask <service_name>

# Re-enable a masked service
sudo systemctl unmask <service_name>

Быстрая справка: Шпаргалка команд systemctl

КомандаОписание
systemctl start <service>Запустить остановленный сервис
systemctl stop <service>Остановить работающий сервис
systemctl restart <service>Остановить и перезагрузить сервис
systemctl reload <service>Перезагрузить конфигурацию без остановки
systemctl reload-or-restart <service>Перезагрузить конфигурацию, если поддерживается, иначе перезагрузить
systemctl enable <service>Включить сервис при загрузке
systemctl disable <service>Отключить сервис при загрузке
systemctl enable --now <service>Включить и запустить немедленно
systemctl disable --now <service>Отключить и остановить немедленно
systemctl status <service>Показать статус сервиса и логи
systemctl is-active <service>Проверить, работает ли сервис
systemctl is-enabled <service>Проверить, запускается ли сервис при загрузке
systemctl is-failed <service>Проверить, не вышел ли сервис из строя
systemctl list-units --type=serviceСписок всех активных сервисов
systemctl --failedСписок всех неработающих сервисов
systemctl daemon-reloadПерезагрузить файлы unit systemd
systemctl mask <service>Полностью предотвратить запуск сервиса
systemctl unmask <service>Снять маску с сервиса

Практические сценарии для администраторов серверов

Сценарий 1: Применение изменений конфигурации Nginx

Вы отредактировали /etc/nginx/nginx.conf на вашем веб-сервере. Чтобы применить изменения без разрыва активных соединений:

# First, test the configuration syntax
sudo nginx -t

# If the test passes, reload gracefully
sudo systemctl reload nginx

Сценарий 2: Восстанов

15%

Сэкономьте 15% на всех хостинговых услугах

Проверьте свои навыки и получите скидку на любой тарифный план

Используйте код:

Skills
Начать