Демон в Linux — что это и зачем
Демон — фоновый процесс без терминала, который работает постоянно: SSH-сервер, веб-сервер, СУБД, cron. Запускается обычно при старте системы и слушает события или соединения. На современной Ubuntu демонами управляет systemd через unit-файлы.
Демон (daemon)
Демон — фоновый процесс без терминала, который работает постоянно: SSH-сервер, веб-сервер, СУБД, cron. Запускается обычно при старте системы и слушает события или соединения. На современной Ubuntu демонами управляет systemd через unit-файлы.
Что это в одном абзаце
Когда вы запускаете программу из шелла, она привязана к терминалу: закрыли SSH-сессию — программа умирает. Демон работает иначе: он отделён от терминала, ждёт событий (входящие соединения, время по cron, сигналы) и работает столько, сколько живёт сам сервер. Имена многих демонов оканчиваются на d: sshd, httpd, crond, systemd — это конвенция, которая помогает в ps и top отличать их от пользовательских команд.
ps aux | grep -E '(sshd|nginx|postgres|cron)' | head
Откуда название
Слово «daemon» — отсылка к концепции древнегреческого daemon: невидимое существо, которое незаметно работает на фоне. Термин закрепил Project MAC в MIT в 1960-х. К дьяволу отношения не имеет, хотя по-русски часто пишут «демон» — и это уже устоявшийся технический термин.
Чем демон отличается от обычного процесса
Канонический демон UNIX-стиля делает три вещи при запуске (это называется «daemonization»):
fork()и завершение родителя. Программа порождает дочерний процесс и сразу выходит — в шелле создаётся впечатление, что команда отработала, но дочерний процесс продолжает жить.setsid()— отделяется от управляющего терминала. Теперь сигналSIGHUPпри закрытии SSH-сессии его не убьёт.- Перенаправление stdin/stdout/stderr в
/dev/nullи логирование в syslog или собственный файл.
В современном systemd-мире эту работу за вас делает менеджер сервисов: вы пишете обычную программу, которая просто работает в foreground, а systemd сам запускает её в фоне, ведёт логи и перезапускает при падении. Это называется «new-style daemon» (Type=simple) — рекомендованный паттерн для нового софта.
Где живут демоны
Бинарники классических системных демонов лежат в:
/usr/sbin/— большинство системных демонов:sshd,cron,nginx. Префиксsозначает «system» — обычным пользователям эти команды напрямую не нужны./usr/bin/— реже, для демонов, которые могут запускаться и обычным пользователем./usr/lib/systemd/systemd— сам PID 1.
Конфигурация — в /etc/<имя_демона>/:
/etc/ssh/sshd_config/etc/nginx//etc/postgresql/<version>/main/
Логи в современной Ubuntu — через journald: journalctl -u <service>. Старые демоны могут писать ещё и в /var/log/<имя>.log.
Как Ubuntu запускает демоны
Сейчас стандарт — systemd. При загрузке системы PID 1 (systemd) читает unit-файлы из:
/lib/systemd/system/— поставляемые с пакетами Ubuntu./etc/systemd/system/— ваши собственные или переопределения.
И запускает все демоны, у которых стоит автозагрузка (systemctl enable). Посмотреть запущенные:
systemctl list-units --type=service --state=running
До systemd демонами управлял SysV init через скрипты в /etc/init.d/<service>. Эти скрипты делали всю «daemonization»-работу руками: форкались, отделялись, писали PID-файл, перенаправляли потоки. systemd сделал это ненужным.
Подробно про управление демонами — в термине systemd и в практическом гайде systemctl enable и unit-файлы.
Типичные демоны Ubuntu
Что вы найдёте на свежем Ubuntu Server 24.04:
- systemd — менеджер сервисов с PID 1.
- systemd-journald — сборщик логов.
- systemd-resolved — локальный DNS-резолвер.
- systemd-timesyncd — синхронизация времени по NTP.
- sshd — SSH-сервер для входящих подключений.
- cron — планировщик задач (постепенно вытесняется systemd-таймерами).
- rsyslog — традиционный сборщик логов (часто работает параллельно с journald).
- dbus-daemon — шина сообщений между процессами.
- udevd — менеджер устройств (горячее подключение).
После установки веб-стека добавятся:
- nginx или apache2, php-fpm.
- postgresql или mysqld / mariadbd.
- dockerd + containerd при установке Docker.
Частые вопросы
Что такое демон в Linux простыми словами
Программа, которая работает на сервере в фоне, без окна и терминала, и обычно стартует автоматически при загрузке. Примеры: SSH-сервер, который ждёт входящих подключений; веб-сервер, обрабатывающий запросы; СУБД, обслуживающая клиентов. Сам пользователь напрямую с демоном не общается — общается клиент (SSH-клиент, браузер, psql).
Чем демон отличается от службы (service)
В мире Linux это часто синонимы. Технически «демон» — UNIX-термин про процесс с отделённым tty, «служба» (service) — Windows/systemd-термин про управляемую единицу. Когда говорят «systemd service», обычно имеют в виду демона, обёрнутого в unit-файл.
Зачем демон отделяется от терминала
Чтобы переживать закрытие сессии. Если бы sshd был привязан к терминалу администратора, который его запустил, при логауте админа SSH-демон умер бы — и сервер стал недоступен извне. Отсоединение через setsid() (или systemd-обёртку) делает процесс независимым от чьей-либо сессии.
Как посмотреть всех демонов на Ubuntu
systemctl list-units --type=service --state=running — все активные сервисы. ps -eo pid,user,cmd --forest — дерево процессов; демоны увидите как ветви от systemd (PID 1). Старый способ через pstree -p тоже работает.
Как создать свой демон
Простейший путь на современной Ubuntu: написать обычную программу в foreground, рядом положить unit-файл [Service] ExecStart=... Restart=always, и sudo systemctl enable --now. systemd сам запустит её в фоне, перенаправит вывод в journald и будет перезапускать при падении. Подробно — в гайде по systemctl и systemd unit.
Что почитать
- systemd — менеджер демонов с PID 1, который сейчас запускает большинство сервисов на Ubuntu.
- systemctl enable: включаем сервис в автозагрузку и пишем свой unit — как сделать свой демон через unit-файл, без ручного
fork()/setsid(). - SSH-ключи Ubuntu — пример работы с одним из самых заметных демонов:
sshd. - nginx reverse proxy на Ubuntu — как настроить и запустить nginx-демон как фронт для приложения.