Linux

Управление службами Linux через systemctl: полное руководство

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

Обновлено 15 февраля 2026 г.
15-20 мин
Низкая
FixPedia Team
Применимо к:Ubuntu 20.04+CentOS/RHEL 8+Debian 11+Fedora 35+Любой дистрибутив с systemd

Введение / Зачем это нужно

systemctl — это основная утилита для управления systemd, системы инициализации и менеджера служб, которая используется в подавляющем большинстве современных дистрибутивов Linux (Ubuntu, CentOS, Debian, Fedora и др.). С её помощью вы можете контролировать жизненный цикл фоновых процессов (служб), таких как веб-серверы, базы данных, сетевые демоны и многие другие компоненты системы.

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

Требования / Подготовка

  1. Доступ к терминалу Linux с установленным systemd. Вы можете проверить его наличие командой:
    ps -p 1 -o comm=
    
    Команда должна вернуть systemd.
  2. Права суперпользователя (root или sudo) для управления большинством системных служб. Для управления пользовательскими службами права root могут не потребоваться.
  3. Базовое понимание командной строки и структуры имён служб (обычно они имеют расширение .service, например, nginx.service или sshd.service).

Шаг 1: Проверка статуса службы

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

sudo systemctl status <имя_службы>.service
  • Пример: sudo systemctl status nginx.service
  • Что делает: Выводит подробную информацию: активно ли юнит, был ли он успешно запущен, PID процесса, время последнего запуска и последние строки журнала этой службы.
  • Короткая форма: Для простого вывода статуса (активен/неактивен) используйте systemctl is-active <имя_службы> или systemctl is-enabled <имя_службы> (показывает, включена ли автозагрузка).

Шаг 2: Базовое управление (запуск, остановка)

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

# Запустить службу немедленно
sudo systemctl start <имя_службы>.service

# Остановить службу
sudo systemctl stop <имя_службы>.service
  • Пример: sudo systemctl start apache2.service
  • Важно: Если служба уже запущена, команда start ничего не сделает. Если остановлена — stop также ничего не изменит. Для принудительного перезапуска см. следующий шаг.

Шаг 3: Настройка автозагрузки (enable/disable)

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

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

# Отключить автозапуск
sudo systemctl disable <имя_службы>.service
  • Что происходит: enable создаёт символические ссылки в каталоге /etc/systemd/system/ (или /lib/systemd/system/), указывающие systemd на необходимость запуска этой службы при достижении определённого целевого уровня (target), обычно multi-user.target или graphical.target.
  • Полезная команда: systemctl is-enabled <имя_службы>.service покажет, настроена ли автозагрузка (enabled/disabled/static/masked).

Шаг 4: Перезапуск и перезагрузка конфигурации

Часто после изменения конфигурационного файла службы (например, /etc/nginx/nginx.conf) нужно применить изменения без полной остановки.

# Полный перезапуск (остановить и снова запустить)
sudo systemctl restart <имя_службы>.service


# Перезагрузить конфигурацию (без остановки, если служба это поддерживает)
sudo systemctl reload <имя_службы>.service
  • Критическое отличие: restart гарантирует, что служба запустится заново с чистой средой, но вызывает кратковременный простой. reload — это более "мягкая" операция, но не все службы её поддерживают. Если reload недоступен, systemd сообщит об этом.
  • Альтернатива: sudo systemctl try-reload-or-restart <имя_службы>.service попробует выполнить reload, а если нет — restart.


Шаг 5: Просмотр журналов (логов) службы

Диагностика начинается с логов. journalctl — это инструмент для работы с журналом systemd (journal).

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

# Показать логи с текущей загрузки системы (после последнего reboot)
sudo journalctl -u <имя_службы>.service -b

# Следить за логами в реальном времени (аналог tail -f)
sudo journalctl -u <имя_службы>.service -f
  • Фильтры: Добавьте --since "2024-01-01 10:00:00" для фильтрации по времени или -p err для показа только сообщений об ошибках.
  • Полезно: Комбинация systemctl status и journalctl позволяет быстро понять, почему служба не запускается или ведёт себя нестабильно.

Шаг 6: Дополнительные полезные операции

Перезагрузка всей системы (Isolate Target)

Переключение systemd на другой целевой уровень (target), аналогично изменению runlevel в SysVinit.

# Переключиться в многопользовательский режим без графики (аналог runlevel 3)
sudo systemctl isolate multi-user.target

# Вернуться в графический режим (аналог runlevel 5)
sudo systemctl isolate graphical.target

Блокировка службы (Mask/Unmask)

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

# Полностью заблокировать службу (создаёт символическую ссылку на /dev/null)
sudo systemctl mask <имя_службы>.service

# Разблокировать
sudo systemctl unmask <имя_службы>.service
  • Внимание: Используйте mask с осторожностью. Заблокировать можно критически важную службу (например, sshd), после чего может потребоваться доступ к консоли управления для разблокировки.

Перезагрузка демона (Daemon-Reload)

После изменения файла юнита (самого .service файла, например, в /etc/systemd/system/), нужно сообщить systemd об этом.

sudo systemctl daemon-reload
  • Когда: Всегда после ручного редактирования или создания нового файла службы, но перед её перезапуском (restart).

Проверка результата

  1. Проверьте статус: sudo systemctl status <имя_службы>.service. Убедитесь, что строка Active: показывает active (running) для запущенных служб или inactive (dead) для остановленных.
  2. Проверьте автозагрузку: systemctl is-enabled <имя_службы>.service должен вернуть enabled.
  3. Протестируйте функциональность: Для веб-сервера — сделайте HTTP-запрос (curl http://localhost), для SSH — попробуйте подключиться. Это самый надёжный способ убедиться, что служба работает корректно, а не просто "запущена".

Возможные проблемы

Проблема / СимптомВероятная причинаРешение
Failed to start <служба>.serviceОшибка в конфигурационном файле службы или зависимостях.1. Выполните sudo systemctl status <служба>.service и найдите строку Result:.
2. Просмотрите логи: sudo journalctl -u <служба>.service -b -p err.
3. Проверьте синтаксис конфигурации (если есть утилита -t, например, nginx -t).
Unit <служба>.service not found.Служба не установлена, имя указано неверно или файл юнита отсутствует.1. Убедитесь в правильности имени.
2. Найдите файл: sudo find / -name "*<часть_имени>*.service" 2>/dev/null.
3. Если служба не установлена — установите соответствующий пакет (e.g., sudo apt install nginx).
Permission denied при start/stopЗапуск без прав суперпользователя (sudo).Все операции управления системными службами требуют sudo. Используйте sudo systemctl ... или войдите в сессию root.
Служба запускается, но не работает (порт не слушает, процесс не отвечает)Проблема внутри самой службы (ошибка в коде, нехватка ресурсов, конфликт портов).1. Проверьте, запущен ли процесс: ps aux | grep <имя_процесса>.
2. Проверьте, слушает ли нужный порт: sudo ss -tulpn | grep :<порт>.
3. Изучите логи приложения (не только journald) в /var/log/ или указанных в конфиге.
masked служба не запускается, даже после enableСлужба была заблокирована (mask).Разблокируйте её: sudo systemctl unmask <служба>.service, затем sudo systemctl enable --now <служба>.service.

Часто задаваемые вопросы

Как узнать, какие службы сейчас активны?
Чем отличается `systemctl restart` от `systemctl reload`?
Как сделать так, чтобы служба запускалась автоматически при загрузке системы?
Что значит ошибка 'Failed to start <служба>.service'?

Полезное

Проверка статуса существующей службы
Базовое управление: запуск и остановка
Настройка автозагрузки
Перезапуск и перезагрузка конфигурации
Просмотр логов службы