Чем daemon отличается от service в Linux и как читать статусы systemctl

На чтение
7 мин
Дата обновления
05.11.2026

Служба может быть enabled и при этом не работать, active — без постоянно запущенного процесса, а inactive — после успешного выполнения задания. Эти сочетания перестают казаться противоречивыми, если разделить процесс, описание службы и правила её запуска.

Ниже рассматриваем Linux с systemd. Команды и названия состояний основаны на его официальных man-страницах; учебный demo-check.service вымышлен. В другой системе инициализации systemctl может не быть основным инструментом. Сначала читаем состояние, затем выбираем действие: перезапуск без понимания причины способен прервать работу службы и стереть удобный момент для наблюдения.

Daemon — процесс, service unit — управляемое описание

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

Unit — объект конфигурации и управления systemd. Существуют разные типы: service, socket, timer, mount и другие. Service unit описывает запуск и остановку службы, команды и связанные условия. Не любой unit означает процесс-демон: таймер задаёт запуск по расписанию, а mount относится к монтированию.

Даже service unit не обязательно равен одному постоянно живущему PID. У службы могут быть дочерние процессы; одноразовое задание способно закончиться, сохранив состояние active по настройке. Поэтому искать «тот самый daemon» только по наличию MainPID недостаточно.

Прочитать status по слоям

Для реальной службы подставьте её точное имя:

systemctl status demo-check.service --no-pager
systemctl show demo-check.service -p LoadState -p ActiveState -p SubState -p UnitFileState -p MainPID

status удобен человеку, show выводит свойства, которые легче проверять по отдельности. Состояния относятся к разным вопросам:

Поле или группаО чём сообщаетЧего не доказывает
Loaded / LoadStateЗагружено ли описание unit и есть ли проблемы загрузкиЧто программа сейчас успешно выполняет бизнес-задачу
Active / ActiveStateОбщее состояние unit: active, inactive, failed и другиеЧто обязательно есть один живой главный процесс
Sub / SubStateБолее подробное состояние, зависящее от типа unitЧто одно название имеет одинаковый смысл для всех типов
UnitFileStateСостояние установки unit, например enabled, disabled, static или maskedЧто он уже запущен или остановлен
MainPIDТекущий главный PID службы, если он определёнЧто отсутствие PID само по себе означает ошибку

В status строка Loaded может одновременно содержать путь к файлу и enabled. Это не два варианта одного текущего состояния: загруженность конфигурации и правила включения различаются. Значения show удобны, когда длинная строка status вводит в заблуждение.

Active и Sub: почему running и exited оба возможны

active означает активное состояние в смысле типа unit. Для длительно работающей службы часто виден active (running). Для Type=oneshot после завершения действие зависит в том числе от RemainAfterExit. При RemainAfterExit=yes unit может остаться active (exited), хотя команда уже закончилась.

Без RemainAfterExit одноразовая служба после выполнения не обязана оставаться active: inactive (dead) может быть нормальным результатом. Для решения нужно знать замысел unit и результат команды. Отдельная зелёная или серая строка не заменяет чтения настройки.

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

Enabled не равно запущено

enable создаёт связи согласно разделу Install и сам по себе не запускает службу. start запускает сейчас и сам по себе не означает включения при загрузке. Соответственно, enabled вместе с inactive возможно, как и disabled вместе с active.

systemctl is-active demo-check.service
systemctl is-enabled demo-check.service
systemctl list-unit-files --type=service
systemctl list-units --type=service --all

Первые две команды проверяют разные свойства. list-unit-files показывает установленные описания и их состояния, а list-units — units, о которых знает менеджер; это разные списки. Не считайте отсутствие имени в обычном выводе без --all доказательством удаления файла.

static означает, что в unit нет инструкции Install для обычного enable. Это не синоним неисправности: он может запускаться другим unit или вручную, если остальные условия позволяют. masked — более сильное ограничение, препятствующее запуску; оно отличается от просто disabled.

Учебный oneshot: active без daemon в фоне

Рассмотрим описание отдельной тестовой службы, а не существующий файл вашей системы:

[Unit]
Description=Learning one-shot check

[Service]
Type=oneshot
ExecStart=/usr/bin/true
RemainAfterExit=yes

Если такой unit корректно установлен в лабораторной системе и команда завершилась успешно, ожидаемая логика — активное состояние после выхода. Главный процесс уже не обязан существовать. Отсутствие Install также объясняет, почему обычное включение автозапуска здесь не предусмотрено самим файлом.

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

Статус связать с журналом и конфигурацией

При ошибке сначала посмотрите unit и его журнал за текущую загрузку:

systemctl cat demo-check.service
journalctl -u demo-check.service -b -n 50 --no-pager

Опция -u выбирает службу, -b — текущую загрузку, -n 50 ограничивает число строк. Если нужный сбой был до перезагрузки, такое ограничение времени исключит его из результата: скорректируйте выбор журнала. Доступность записей зависит от прав и настроек хранения.

Сопоставьте время попытки запуска с сообщениями приложения и systemd. Сообщение процесса о неверном параметре, невозможность выполнить ExecStart и тайм-аут готовности — разные направления проверки. Посмотрите путь, аргументы, рабочие условия и зависимости из фактического unit, включая drop-in-настройки, которые показывает cat.

Краткий хвост журнала внутри status не обязательно содержит самое раннее полезное сообщение. Если видно несколько быстрых неудачных перезапусков, найдите исходную ошибку, а не только последнюю запись об ограничении запуска. При автоматизации учитывайте код возврата команды проверки: неактивная служба может дать ненулевой результат status или is-active, хотя сама проверка успешно определила состояние.

Какие действия что меняют

ДействиеНазначение
start / stopЗапустить или остановить unit сейчас
restartПерезапустить; действие может прервать текущую работу
reloadПопросить службу перечитать её конфигурацию, если это поддерживается
daemon-reloadПеречитать конфигурацию units менеджером systemd; это не перезапуск всех приложений
enable / disableИзменить включение по Install; без --now это не непосредственный запуск или остановка
mask / unmaskУстановить или снять маскировку, отдельно от текущего запуска

Например, после изменения файла unit обычно нужно перечитать описание менеджером, а затем применить подходящее действие к конкретной службе. reload приложения и daemon-reload менеджера не взаимозаменяемы. Для системного менеджера изменения обычно требуют административных прав; пользовательские units управляются через systemctl --user и относятся к другому менеджеру.

Если unit masked, сначала выясните, почему ограничение установлено. Автоматическое unmask ради исчезновения сообщения может отменить осознанную политику администратора. reset-failed убирает сохранённое состояние отказа и связанные счётчики, но не ремонтирует причину падения программы.

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