Команды 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 nginx5. Включение сервиса при загрузке
Включение сервиса создаёт необходимые символические ссылки, чтобы systemd автоматически запускал его при загрузке системы.
Синтаксис:
sudo systemctl enable <service_name>Пример:
sudo systemctl enable nginxВключить и запустить одновременно (рекомендуется):
sudo systemctl enable --now nginx6. Отключение сервиса при загрузке
Отключение сервиса предотвращает его автоматический запуск, но не останавливает его, если он в данный момент работает.
Синтаксис:
sudo systemctl disable <service_name>Пример:
sudo systemctl disable bluetoothОтключить и остановить одновременно:
sudo systemctl disable --now bluetooth7. Проверка статуса сервиса
Команда 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