Перейти к содержанию

Управление службами в 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 [опции] команда [служба]

Примечание

В большинстве случаев для работы с 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-файл:

sudo systemctl daemon-reload
sudo systemctl restart nginx

2. Просмотр зависимостей

systemctl list-dependencies nginx

3. Журнал службы (через journalctl)

sudo journalctl -u nginx --since "1 hour ago"
sudo journalctl -u nginx -f  # live-просмотр логов

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.

question_mark
Я могу вам чем-то помочь?
question_mark
ИИ Помощник ×