Управление службами в systemd¶
systemd — стандартная система инициализации и управления службами в большинстве современных Linux-дистрибутивов:
✅ Ubuntu 16.04+ (настоятельно рекомендуется Ubuntu 20.04/22.04/24.04)
✅ Debian 8+ (Debian 11/12 — актуальные LTS-версии)
✅ RHEL/CentOS 7+ (RHEL 9 / AlmaLinux/Rocky Linux 9 — современные замены CentOS)
✅ Fedora, openSUSE, Arch и другие
После загрузки ядра ядро передаёт управление systemd (PID 1), который отвечает за:
- запуск и остановку служб (services),
- монтирование файловых систем,
- настройку сети и окружения,
- управление зависимостями между компонентами.
Основной интерфейс взаимодействия с systemd — утилита systemctl.
Базовый синтаксис¶
Примечание
В большинстве случаев для работы с systemctl требуются права суперпользователя — используйте sudo.
Просмотр состояния служб¶
| Задача | Команда |
|---|---|
| Список активных юнитов (services, sockets, timers и др.) | systemctl list-units |
| Только запущенные сервисы | systemctl list-units --type=service |
| Все сервисы (включая остановленные и неактивные) | systemctl list-units --type=service --all |
| Список работающих (running) сервисов | systemctl list-units --type=service --state=running |
| Поиск конкретной службы (например, nginx) | systemctl list-units '*nginx*' |
| Подробная информация о службе | systemctl status nginx (с логами, PID, зависимостями) |
Примечание
Добавьте --no-pager, чтобы вывод не «залипал» в pager (например, systemctl status nginx --no-pager).
Управление работой службы¶
Рассмотрим на примере nginx — но подходит для любой службы: sshd, postgresql, clamav-daemon, docker и т.д.
| Действие | Команда | Примечание |
|---|---|---|
| Проверить статус | sudo systemctl status nginx | Покажет: запущена ли, PID, последние логи, ошибки |
| Запустить | sudo systemctl start nginx | Только до перезагрузки |
| Остановить | sudo systemctl stop nginx | |
| Перезапустить | sudo systemctl restart nginx | Полная остановка → запуск (если не запущена — запустится) |
| Обновить конфиг без остановки | sudo systemctl reload nginx | Работает, если служба поддерживает сигнализацию SIGHUP (nginx, apache, postfix — поддерживают) |
| Reload или Restart | sudo systemctl reload-or-restart nginx | Если reload не поддерживается — автоматически делает restart |
| Попытаться перезапустить (только если запущена) | sudo systemctl try-restart nginx | Безопасно для скриптов |
| Проверить, активна ли служба | systemctl is-active nginx | Вывод: active / inactive / unknown |
| Проверить, упала ли служба | systemctl is-failed nginx | Вывод: failed — если сервис завершился с ошибкой |
Примечание
После start/restart служба не будет запускаться автоматически при перезагрузке — для автозагрузки требуется отдельная настройка.
Управление автозагрузкой¶
| Действие | Команда | Что происходит |
|---|---|---|
| Включить автозагрузку | sudo systemctl enable nginx | Создаёт символическую ссылку из /usr/lib/systemd/system/nginx.service в /etc/systemd/system/multi-user.target.wants/ |
| Отключить автозагрузку | sudo systemctl disable nginx | Удаляет ссылку, но не останавливает текущий процесс |
| Проверить статус автозагрузки | systemctl is-enabled nginx | Возможные значения: enabled, disabled, static, masked |
| Сбросить настройки → включить заново | sudo systemctl reenable nginx | Полезно при изменении WantedBy= в юнит-файле |
| Восстановить «по умолчанию» | sudo systemctl preset nginx | Применяет предустановленные правила автозапуска из пакета (редко используется) |
Расширенные возможности¶
1. Принудительная перезагрузка конфигурации systemd¶
Если вы отредактировали .service-файл:
2. Просмотр зависимостей¶
3. Журнал службы (через journalctl)¶
4. Маскирование службы (полное отключение, даже вручную)¶
sudo systemctl mask nginx # создаёт ссылку на /dev/null
sudo systemctl unmask nginx # отменяет маскирование
Полезные «ярлыки» для повседневного использования¶
# Быстро проверить, включён ли и работает ли сервис
systemctl is-active --quiet nginx && echo "OK" || echo "STOPPED"
# Запустить и включить автозагрузку одной командой
sudo systemctl enable --now nginx
# Отключить и остановить
sudo systemctl disable --now nginx
Примечание
Флаг --now (доступен с systemd v220+, 2015+) одновременно выполняет enable + start или disable + stop.