Службы (services) и демоны (daemons) — это фоновые процессы, которые стартуют при загрузке системы и обеспечивают всю «магическую» автоматику Linux. Если служба упала или не запустилась, пользователи тут же сталкиваются с проблемами: от отсутствия SSH‑доступа до неработающего веб‑сайта. Этот гайд показывает, как быстро диагностировать и администрировать службы на системах, использующих systemd, с акцентом на надёжность и практику в продакшене.
Узнаём, действительно ли у нас systemd
Почти все современные дистрибутивы (Ubuntu, Debian, RHEL, Arch, Manjaro) используют systemd, но есть исключения. Проверяем первый запущенный процесс:
pstree -p | head -5
Базовая навигация по службам с помощью systemctl
Команда | Что делает |
---|---|
| Показывает только запущенные службы |
| Ищет службы со статусом Failed |
| Показывает все службы вне зависимости от статуса |
| Запускает службу вручную |
| Останавливает службу |
| Перезапускает службу, перезагружая её процесс |
| Включает автозапуск при старте ОС |
| Отключает автозапуск |
Длинные выводы
systemctl
автоматически открываются вless
.Горизонтальная прокрутка — стрелки ←/→.
Промотать на 50 строк вниз/вверх — PgDn/PgUp.
Поиск
/pattern
— как в Vim.Выход — клавиша
Q
.
Лайфхак: если хотите открыть вывод сразу в полноэкранном режиме без приглашения less
, задайте переменную окружения:
export SYSTEMD_PAGER=less
Фильтрация вывода и комбинирование состояний
systemctl
поддерживает фильтры--state
и--type
.
Обзор всех типов sub‑состояний
running
— запущен и активенexited
— успешно завершён (oneshot‑сервисы)failed
— аварийно завершёнinactive
— остановлен / ещё не стартовалdead
— aliasinactive
Чтобы увидеть службы в двух состояниях сразу:
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"
Типовые неисправности и быстрые решения
Симптом | Возможная причина | Ремедиэйшн |
---|---|---|
| Ошибка конфигурации, нехватка портов |
|
Статус | Служба завершилась сразу после запуска | Убедитесь, что это oneshot-сервис — это нормально |
Служба «висит» в | Долгая инициализация или зависание Job | Проверить тайм-ауты в unit‑файле ( |
Статус | Заблокирована админом или пакетом |
|
Точечный 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
быстро локализуете проблемы. Регулярно проверяйте статус служб, автоматизируйте рестарт, и ваша инфраструктура останется стабильной даже под нагрузкой.
Надёжные службы = довольные пользователи — аксиома любого админа.