opened image

Полный гид по управлению службами systemd на Linux

 

Службы (services) и демоны (daemons) — это фоновые процессы, которые стартуют при загрузке системы и обеспечивают всю «магическую» автоматику Linux. Если служба упала или не запустилась, пользователи тут же сталкиваются с проблемами: от отсутствия SSH‑доступа до неработающего веб‑сайта. Этот гайд показывает, как быстро диагностировать и администрировать службы на системах, использующих systemd, с акцентом на надёжность и практику в продакшене.

 

 

Узнаём, действительно ли у нас systemd

 

Почти все современные дистрибутивы (Ubuntu, Debian, RHEL, Arch, Manjaro) используют systemd, но есть исключения. Проверяем первый запущенный процесс:

 

pstree -p | head -5

 

 

 

 

Базовая навигация по службам с помощью systemctl

 

Команда

Что делает

systemctl --type=service --state=running

Показывает только запущенные службы

systemctl --type=service --state=failed

Ищет службы со статусом Failed

systemctl --type=service

Показывает все службы вне зависимости от статуса

sudo systemctl start <service>

Запускает службу вручную

sudo systemctl stop <service>

Останавливает службу

sudo systemctl restart <service>

Перезапускает службу, перезагружая её процесс

sudo systemctl enable <service>

Включает автозапуск при старте ОС

sudo systemctl disable <service>

Отключает автозапуск

 

 

Длинные выводы systemctl автоматически открываются в less.

Горизонтальная прокрутка — стрелки ←/→.

Промотать на 50 строк вниз/вверх — PgDn/PgUp.

Поиск /pattern — как в Vim.

Выход — клавиша Q.

 

 

Лайфхак: если хотите открыть вывод сразу в полноэкранном режиме без приглашения less, задайте переменную окружения:

 

export SYSTEMD_PAGER=less

 

 

 

Фильтрация вывода и комбинирование состояний

 

systemctl поддерживает фильтры --state и --type.

 

Обзор всех типов sub‑состояний

 

  • running — запущен и активен

  • exited — успешно завершён (oneshot‑сервисы)

  • failed — аварийно завершён

  • inactive — остановлен / ещё не стартовал

  • dead — alias inactive

 

Чтобы увидеть службы в двух состояниях сразу:

 

systemctl --type=service --state=failed,exited

 

 

 

 

Чтобы найти конкретную службу, дополняем grep‑ом:

 

systemctl --type=service --state=running | grep ssh

 

 

 

 

Unit‑файлы: что ещё установлено, но не запущено

 

Команда list-unit-files показывает все unit‑файлы в системе, то есть потенциальные службы.

 

Просмотр всех активных юнитов:

 

sudo systemctl list-units --type=service --state=running

 

или:

 

systemctl --type=service --state=running

 

Разница лишь в явном указании подкоманды list-units и использовании sudo (нужно, если юнит-файлы защищены root ACL).

 

 

 

Полный список юнит‑файлов без фильтрации

 

Чтобы увидеть все установленные unit‑файлы, включая disabled, static, masked, используем команду:

 

systemctl list-unit-files

 

 

Частые статусы unit‑файлов:

 

  • enabled — автозапуск при старте ОС.

  • disabled — не стартует автоматически.

  • masked — заблокирован симлинком на /dev/null.

  • static — запускается как зависимость.

 

Обратите внимание: вывод зачастую в 2‑4 раза длиннее, чем список реально запущенных служб.

 

 

 

Используйте множественный фильтр, чтобы быстро найти подозрительные записи:

 

systemctl list-unit-files --type=service --state=enabled,failed

 

 

 

Тонкая фильтрация unit‑файлов по состоянию

 

Комбинация:

 

systemctl list-unit-files --state=enabled,failed

 

показывает unit‑файлы, которые должны стартовать, но по какой‑то причине упали. Удобно при обновлении systemd‑сервисов: сразу видно, кто не поднялся.

 

 

Детальный разбор одной службы

 

Для глубокой диагностики используется:

 

systemctl status ssh

 

 

 

Вы увидите:

 

  • путь к unit‑файлу;

  • время работы;

  • PID, потребление памяти, ЦП;

  • последние строки журнала (journalctl).

 

Полные логи службы:

 

journalctl -u ssh.service --since "1 hour ago"

 

 

Типовые неисправности и быстрые решения

 

Симптом

Возможная причина

Ремедиэйшн

failed в колонке SUB

Ошибка конфигурации, нехватка портов

journalctl -xeu <service> для деталей

Статус active (exited) вместо running

Служба завершилась сразу после запуска

Убедитесь, что это oneshot-сервис — это нормально

Служба «висит» в activating

Долгая инициализация или зависание Job

Проверить тайм-ауты в unit‑файле (TimeoutStartSec)

Статус masked

Заблокирована админом или пакетом

sudo systemctl unmask <service>

 

 

Точечный grep по запущенным службам

 

systemctl --type=service --state=running | grep ssh

 

 

 

 

 

Добавим флаг -i для нечувствительности к регистру:

 

systemctl --type=service --state=running | grep -i nginx

 

 

 

 

Неявный статус «active (exited)»

 

Когда служба отображается как active (exited), это не всегда ошибка. Часто это Type=oneshot юнит:

 

[Service]
Type=oneshot
ExecStart=/usr/local/bin/prepare-env.sh

 

Такие юниты выполняют задачу и завершаются, оставаясь активными в глазах systemd.

 

 

Быстрый анализ проблемных служб

 

Если найден failed юнит, оперативная тройка команд такова:

 

systemctl status <service>   
journalctl -u <service> -e   
systemctl restart <service>

 

После рестарта проверяем статус. Если снова failed, изучаем journalctl -xeu <service>.

 

 

Мини‑шпаргалка использованных команд:

 

# Проверка PID 1
pstree -p | head -5

# Список служб (варианты)
systemctl --type=service --state=running
sudo systemctl list-units --type=service --state=running

# Фильтры состояний
systemctl --type=service --state=failed,exited

# Unit‑файлы
systemctl list-unit-files                       # все
systemctl list-unit-files --state=enabled       # включённые
systemctl list-unit-files --state=enabled,failed

# Поиск по выводу
systemctl --type=service --state=running | grep ssh

# Детали службы
systemctl status ssh
journalctl -u ssh --since "1 hour ago"

# Управление
sudo systemctl start|stop|restart|enable|disable <service>

 

 

Итоги

 

systemctl — главный инструмент управления службами в системах с systemd. Зная две‑три базовых команды и юзая фильтры --state, --type, вы получаете полную картину здоровья сервисов, а с помощью journalctl быстро локализуете проблемы. Регулярно проверяйте статус служб, автоматизируйте рестарт, и ваша инфраструктура останется стабильной даже под нагрузкой.

Надёжные службы = довольные пользователи — аксиома любого админа.