hostprofi.ru
Подобрать хостинг
Термин·буква Д

Демон (daemon)

краткое определение

Демон (daemon) — фоновый процесс в Unix/Linux, работающий без взаимодействия с пользователем. Обычно запускается при старте системы, выполняет системные задачи (веб-сервер, СУБД, почта) и управляется через systemd, init или SysV-скрипты.

Демон (daemon) — долгоживущий фоновый процесс в Unix-подобных ОС, не привязанный к управляющему терминалу пользователя. Демон работает независимо от входа в систему, обычно запускается при старте ОС и завершается при выключении. Большинство серверных приложений работают как демоны: nginx, sshd, postfix, mysqld, postgresql, crond, rsyslogd.

Характеристики демона

Типичный демон отличается от обычного процесса рядом свойств:

  • Отвязан от управляющего терминала (tty) — не получает SIGHUP при закрытии терминальной сессии.
  • Запущен через double-fork: родительский процесс завершается, дочерний продолжает работу в новой сессии.
  • Вызывает setsid() — создаёт новую сессию без управляющего терминала.
  • Меняет рабочую директорию на / — предотвращает блокировку размонтирования ФС.
  • Перенаправляет stdin/stdout/stderr на /dev/null или лог-файл.
  • Записывает PID в /var/run/имя.pid для управления и предотвращения дублей.

Управление демонами через systemd

В современных Linux-системах демоны управляются через systemd и описываются юнит-файлами (/etc/systemd/system/). systemd обрабатывает double-fork, PID-файлы и перезапуск автоматически — современным демонам не нужно реализовывать это вручную.

[Unit]
Description=My Application Daemon
After=network.target postgresql.service

[Service]
Type=simple
User=appuser
Group=appgroup
WorkingDirectory=/opt/myapp
ExecStart=/usr/local/bin/myapp --config /etc/myapp/config.yaml
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=5s
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

Restart=on-failure — systemd перезапускает демон при ненулевом коде завершения. Type=notify — для демонов, которые сообщают systemd о готовности через sd_notify().

История термина

Слово «daemon» ввёл Фернандо Корбато (Fernando Corbató) в MIT в 1963 году для системы CTSS — по аналогии с «демоном Максвелла» из термодинамики (Maxwell's daemon): гипотетический агент, работающий в фоне и сортирующий молекулы. Произносится «dee-mon» (как в мифологии) или «day-mon». В Version 7 Unix (1979) стандартизирован набор системных демонов: cron, inetd, lpd, syslogd.

Типы демонов

  • Network daemons — обслуживают сетевые подключения: nginx, sshd, named, postfix.
  • System daemons — системные сервисы: crond (планировщик), udevd (устройства), ntpd/chronyd (время).
  • Application daemons — серверные приложения: postgresql, redis-server, elasticsearch.
  • Super-daemons — демоны, запускающие другие демоны по запросу: inetd, xinetd (устаревшие), systemd socket activation.

Демоны в хостинге

На VPS-сервере типичный набор демонов: nginx (веб-сервер), sshd (SSH), postgresql или mysql (база данных), redis-server (кэш), postfix (почта), crond (планировщик задач), rsyslogd/journald (логирование), chronyd (синхронизация времени). Диагностика зависших демонов: systemctl status имя-сервиса, journalctl -u имя-сервиса -n 100 --no-pager. Просмотр всех запущенных сервисов: systemctl list-units --type=service --state=running.

Перехват сигналов демоном

Демоны обрабатывают POSIX-сигналы для управления поведением без перезапуска:

  • SIGHUP (1) — традиционно используется для reload конфигурации. Nginx: nginx -s reload или kill -HUP $(cat /var/run/nginx.pid). Демон перечитывает конфиг без разрыва существующих соединений.
  • SIGTERM (15) — корректное завершение. Демон завершает текущие задачи и выходит.
  • SIGKILL (9) — принудительное завершение. Нельзя перехватить. Используется только при зависании процесса.
  • SIGUSR1 / SIGUSR2 — определяются самим демоном. Например, Nginx использует SIGUSR1 для ротации логов.

systemd передаёт SIGTERM при systemctl stop и ждёт завершения максимум TimeoutStopSec секунд. После timeout — SIGKILL.

Другие термины