Как работают службы и демоны Linux (и как ими управлять)

Приступая к работе с Linux, вы можете часто сталкиваться с терминами services «службы» и daemons «демоны», которые обозначают фоновые процессы, играющие ключевую роль в обеспечении бесперебойной работы системы, зачастую без непосредственного участия пользователя.
Понимание принципов работы этих компонентов поможет вам лучше управлять системой и эффективнее устранять распространённые неполадки. В этом удобном для новичков обзоре мы расскажем, что такое службы и демоны, как они функционируют в Linux и какие инструменты доступны для эффективного управления ими.
Что такое службы и демоны в Linux?
Давайте разберёмся, что это такое, чем они отличаются и почему это важно.
Что такое демон?
Демон (произносится как DEE-muhn) — это фоновый процесс, который запускается автоматически или работает в фоновом режиме без какого-либо взаимодействия с пользователем. Его задача — ждать определённых системных событий или спокойно и последовательно выполнять рутинные задачи.
Представьте себе демона как постоянно работающего персонального помощника, который не нуждается в контроле.
Вот несколько распространённых примеров:
sshd
— Выполняет удаленный вход по SSH через сеть.httpd
— Управляет вашим веб-сервером, предоставляя доступ к веб-сайтам и API.crond
— Управляет запланированными задачами (например, автоматическим резервным копированием или сценариями обслуживания).
По соглашению большинство демонов в Linux заканчиваются на букву d
, которая означает «демон».
Что такое Услуга?
Хотя термин «демон» относится конкретно к фоновому процессу, в Linux термин «служба» имеет более широкое значение.
Сервис — это управляемый фоновый процесс, который может работать непрерывно, как демон, или запускаться по требованию. Сервисы предоставляют такие функции, как работа в сети, печать, ведение журналов, брандмауэры и многое другое.
Услуги могут:
- Запускается автоматически при загрузке.
- Пользователь может запустить или остановить его вручную.
- Запускайте постоянно или только при необходимости.
Итак, вот главный вывод:
Все демоны — это сервисы, но не все сервисы — демоны.
Например:
- Такой демон, как
sshd
, работает постоянно, ожидая подключений. - Но такая служба, как Bluetooth-сканер, может запускаться только при обнаружении Bluetooth-устройства, то есть она работает по событию и не всегда активна.
Некоторые сервисы работают временно: они запускаются, выполняют задачу и останавливаются.
- Например,
systemd-resolved
, который обрабатывает DNS-запросы на лету. - Или
atd
, который запускает одноразовые запланированные задания, а затем завершает работу.
Эта гибкость — одна из причин, по которой Linux является такой мощной системой: вы запускаете только то, что вам нужно, и тогда, когда вам это нужно.
Как Linux управляет сервисами: systemd и другие
Когда дело доходит до управления службами в современных системах Linux, systemd
играет ведущую роль, выступая в качестве системы инициализации, то есть первого процесса, запускаемого при загрузке системы, которому всегда присваивается PID 1.
После запуска systemd
берет на себя управление всеми остальными службами и демонами в системе. Большинство популярных дистрибутивов Linux, таких как Ubuntu, Fedora, Debian, CentOS и Arch Linux, используют systemd
в качестве системы инициализации по умолчанию благодаря ее скорости, эффективности и широкому набору функций.
Вы взаимодействуете с systemd
в основном через команду systemctl, которая предоставляет вам полный контроль над службами, такими как запуск, остановка, включение, отключение, проверка состояния и многое другое.
Хотя systemd
является текущим стандартом, стоит отметить, что существуют и другие системы инициализации, с которыми вы можете столкнуться, особенно в старых или специализированных дистрибутивах.
- SysVinit — это традиционная система инициализации, использовавшаяся в старых версиях Linux. Она отличалась более простым подходом, который заключался в запуске скриптов в
/etc/init.d
. - Upstart, который когда-то использовался в Ubuntu, был призван улучшить SysVinit за счёт возможностей, основанных на событиях, но в значительной степени был заменён.
- Другой вариант, который всё ещё используется, — OpenRC, лёгкая и простая система инициализации, используемая в таких дистрибутивах, как Alpine Linux и Gentoo.
Тем не менее в этом руководстве мы будем говорить исключительно о systemd
, поскольку именно с этим вы, скорее всего, столкнётесь в реальных средах Linux.
Управление сервисами с помощью systemctl
Команда systemctl
— это основной инструмент для взаимодействия со службами в системе Linux на базе systemd. Вот наиболее распространённые задачи, которые вам нужно знать.
Чтобы проверить состояние службы, используйте следующую команду. Она покажет текущее состояние службы: активна, неактивна, не работает или работает.
sudo systemctl status sshd
Чтобы запустить службу вручную, достаточно ввести простую команду:
sudo systemctl start sshd
Чтобы остановить службу, просто запустите:
sudo systemctl stop sshd
Чтобы перезапустить службу, просто выполните команду:
sudo systemctl restart sshd
Чтобы служба запускалась при загрузке, используйте следующую команду:
sudo systemctl enable sshd
С другой стороны, чтобы отключить автоматический запуск службы, выполните команду:
sudo systemctl disable sshd
Чтобы просмотреть список всех активных в данный момент служб, выполните команду:
systemctl list-units --type=service
Если вам нужен более полный список, включая службы, которые установлены, но не запущены, используйте команду:
systemctl list-unit-files --type=service
Бонус: использование ps, top и htop для просмотра демонов
Хотя такие инструменты, как systemctl
, отлично подходят для управления сервисами, иногда полезно посмотреть, что происходит на уровне процессов. Это может быть особенно полезно, когда нужно убедиться, что демон запущен, проверить использование ресурсов или устранить проблемы с производительностью.
Для начала команда ps выводит список всех запущенных процессов.
ps aux
Если вы ищете конкретный демон, вы можете объединить ps
с grep
для фильтрации результатов.
ps aux | grep sshd
Эта команда поможет вам быстро определить, запущен ли демон SSH и каково его текущее состояние.
ravi 17554 0.0 0.0 9144 2176 pts/0 S+ 10:56 0:00 grep --color=auto sshd
Чтобы в режиме реального времени видеть, что происходит в вашей системе, вы можете использовать top, который по умолчанию входит в состав почти каждого дистрибутива Linux.
top
Если вам нужно что-то более удобное и красочное, попробуйте htop — более продвинутую альтернативу top
. В отличие от top
, htop
позволяет легко прокручивать, фильтровать и сортировать процессы с помощью клавиш со стрелками и функциональных клавиш.
Возможно, вам потребуется сначала установить его:
sudo apt install htop # для Debian/Ubuntu sudo yum install htop # для CentOS/RHEL sudo dnf install htop # для Fedora
После установки запустите htop
и получите гораздо более удобный способ проверки того, что происходит «под капотом».
Заключительные мысли
Службы и демоны лежат в основе любой функционирующей системы Linux, поскольку они выполняют критически важные фоновые задачи, такие как управление SSH-подключениями, планирование заданий, обслуживание веб-контента, синхронизация системного времени и применение правил брандмауэра.
Эти компоненты незаметно работают в фоновом режиме, обеспечивая эффективную и надёжную работу системы. Понимание того, как они функционируют и как ими эффективно управлять, является ключевым фактором для освоения системного администрирования Linux.
Как только вы поймёте, как эффективно управлять сервисами и демонами, вы будете гораздо увереннее ориентироваться в системе Linux и управлять ею.
Редактор: AndreyEx