Введение / Зачем это нужно
Systemd стал стандартом для управления службами и процессами в большинстве современных дистрибутивов Linux (Ubuntu, Fedora, CentOS/RHEL 8+, Debian 10+). Понимание его основ — обязательный навык для системного администратора и разработчика, работающего с серверами.
Это руководство даст вам практические навыки для повседневного управления сервисами: запуск, остановка, настройка автозапуска и диагностика сбоев. Вы сможете уверенно работать с такими командами, как systemctl и journalctl.
Требования / Подготовка
- Дистрибутив Linux с системой инициализации systemd (проверьте:
pidof systemd). - Доступ к терминалу с правами sudo (для управления системными службами).
- Базовое понимание командной строки.
Шаг 1: Основные команды управления состоянием службы
Systemctl — основной инструмент взаимодействия с systemd. Вот ключевые команды для управления состоянием:
- Запуск службы:
Пример:sudo systemctl start имя_службы.servicesudo systemctl start nginx - Остановка службы:
sudo systemctl stop имя_службы.service - Перезапуск службы (мягкий):
sudo systemctl restart имя_службы.service - Принудительная перезагрузка (kill и запуск):
sudo systemctl try-restart имя_службы.service💡 Совет: Для веб-серверов (nginx, apache) после изменения конфигурации используйте
reload(sudo systemctl reload nginx), чтобы перечитать конфиг без разрыва соединений.
Шаг 2: Управление автозагрузкой (включение/отключение)
Чтобы служба автоматически запускалась при загрузке системы, её нужно включить.
- Включить автозапуск:
Эта команда создаёт символьную ссылку на unit-файл в каталогеsudo systemctl enable имя_службы.service/etc/systemd/system/. - Отключить автозапуск:
sudo systemctl disable имя_службы.service - Проверить, включена ли служба в автозагрузку:
Вывод:systemctl is-enabled имя_службы.serviceenabled(включена),disabled(отключена),static(не может быть включена напрямую, но может быть зависимостью),masked(полностью заблокирована).
Шаг 3: Просмотр статуса и всех служб
- Детальный статус конкретной службы:
Вывод показывает:systemctl status имя_службы.serviceActive:(состояние),Main PID:(идентификатор процесса), и последние строки журнала этой службы. - Список всех загруженных (активных) юнитов:
systemctl list-units --type=service - Список ВСЕХ доступных служб (включая неактивные):
systemctl list-units --type=service --all - Поиск службы по имени:
systemctl list-units --type=service --all | grep -i ssh
Шаг 4: Анализ логов с помощью journalctl
Логи systemd хранятся в бинарном журнале, доступном через journalctl.
- Просмотр логов конкретной службы:
sudo journalctl -u имя_службы.service - Отслеживание логов в реальном времени (аналог
tail -f):sudo journalctl -u имя_службы.service -f - Логи за последнюю загрузку системы:
sudo journalctl -b - Логи с фильтрацией по времени:
sudo journalctl --since "2026-02-15 10:00:00" --until "2026-02-15 12:00:00" - Показать логи с максимальной детализацией для службы:
sudo journalctl -u имя_службы.service -o verbose
Шаг 5: Дополнительные операции (перезагрузка конфигурации, маскировка)
- Перезагрузка конфигурации systemd (обязательно после создания/изменения unit-файлов):
sudo systemctl daemon-reload - Полная блокировка службы (mask) — предотвращает любой ручной или автоматический запуск:
Создаёт символическую ссылку наsudo systemctl mask имя_службы.service/dev/null. Разблокировка:sudo systemctl unmask имя_службы.service. - Принудительная остановка и сброс состояния службы:
Полезно, если служба в состоянииsudo systemctl reset-failed имя_службы.servicefailedи не запускается после исправления ошибки.
Проверка результата
- Для проверки работы: выполните
systemctl status имя_службы. Убедитесь, что строкаActive:содержитactive (running). - Для проверки автозагрузки: перезагрузите систему (
sudo reboot) и после входа проверьте статус службы. - Для проверки логов: убедитесь, что
journalctl -u имя_службыне содержит ошибок (failed,error,permission denied).
Возможные проблемы
- Ошибка
Failed to start ...илиUnit not found.- Причина: Unit-файл отсутствует или имеет неверное имя. Убедитесь, что служба существует:
systemctl list-unit-files | grep имя_службы. Проверьте синтаксис unit-файла:sudo systemd-analyze verify /etc/systemd/system/имя_службы.service.
- Причина: Unit-файл отсутствует или имеет неверное имя. Убедитесь, что служба существует:
- Служба запускается, но сразу же останавливается.
- Причина: Ошибка в самом приложении или неверные параметры в секции
[Service](например,ExecStartуказывает на несуществующий бинарник). Смотрите детальные логи:sudo journalctl -u имя_службы.service -n 50 --no-pager.
- Причина: Ошибка в самом приложении или неверные параметры в секции
Permission deniedпри попытке управления системной службой.- Причина: Выполняете команду без
sudo. Для управления системными службами (из/etc/systemd/system/) требуются права root.
- Причина: Выполняете команду без
- Служба не включается в автозагрузку (
enableне срабатывает).- Причина: Unit-файл имеет
[Install]секцию, но не содержитWantedBy=илиRequiredBy=(чаще всегоWantedBy=multi-user.target). Добавьте эту строку в unit-файл и выполнитеdaemon-reloadиenableзаново.
- Причина: Unit-файл имеет
- Циклические перезапуски (restart loop).
- Причина: В unit-файле секция
[Service]содержитRestart=always(илиon-failure), а процесс немедленно завершается с ошибкой. Исправьте ошибку приложения или временно закомментируйтеRestartдля диагностики.
- Причина: В unit-файле секция