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

Приступая к работе с Linux, вы можете довольно часто сталкиваться с терминами services и daemons, которые относятся к фоновым процессам, играющим ключевую роль в обеспечении бесперебойной работы системы, часто не требуя непосредственного участия пользователя.

Понимание того, как работают эти компоненты, поможет вам лучше управлять системой и эффективнее устранять общие неполадки. В этом удобном для новичков обзоре мы объясним, что такое сервисы и демоны, как они функционируют в Linux и какие инструменты помогут вам эффективно управлять ими.

Что такое службы и демоны в Linux?

Давайте разберемся, что это такое, чем они отличаются и почему они важны.

Что такое демон?

Демон (произносится как DEE-muhn) – это фоновый процесс, который запускается автоматически или тихо работает в фоновом режиме без какого-либо участия пользователя. Его задача – ожидать определенных системных событий или тихо и последовательно выполнять рутинные задачи.

Думайте о демоне как о постоянно включенном персональном помощнике, который никогда не нуждается в присмотре.

Вот несколько распространенных примеров:

  • sshd – Обработка удаленных входов в систему SSH по сети.
  • httpd – Запускает веб-сервер, предоставляя веб-сайты и API.
  • crond – Управление запланированными задачами (например, автоматическим резервным копированием или сценариями обслуживания).

По традиции, большинство демонов в Linux заканчиваются буквой d, которая означает daemon.

Что такое служба?

В то время как демон относится именно к фоновому процессу, термин сервис в Linux немного шире.

Служба – это управляемый фоновый процесс, который может выполняться постоянно, как демон, или запускаться по требованию. Службы обеспечивают такие функциональные возможности, как работа в сети, печать, ведение журнала, брандмауэры и многое другое.

Службы могут:

  • Запускаться автоматически при загрузке.
  • Запускаться или останавливаться вручную пользователем.
  • Запускается постоянно или только при необходимости.

Вот основные выводы:

Все демоны являются службами, но не все службы являются демонами.

Например:

  • Демон, подобный sshd, работает все время, прослушивая соединения.
  • Но такая служба, как Bluetooth-сканер, может запускаться только при обнаружении Bluetooth-устройства, что зависит от события и не всегда активно.

Некоторые службы являются преходящими; они запускаются, выполняют задачу и останавливаются:

  • Например, systemd-resolved, который обрабатывает DNS-запросы на лету.
  • Или atd, который выполняет одноразовые задания по расписанию, а затем завершает работу.

Эта гибкость – часть того, что делает Linux такой мощной системой; вы запускаете только то, что вам нужно, и тогда, когда вам это нужно.

Как Linux управляет службами: systemd и многое другое

Когда дело доходит до управления сервисами в современных системах Linux, systemd является доминирующим игроком, который действует как система init, которая является первым процессом, запускаемым при загрузке системы – ей всегда присваивается PID 1.

После запуска systemd берет на себя работу по запуску и управлению всеми остальными службами и демонами в системе. Большинство популярных дистрибутивов Linux, таких как Ubuntu, Fedora, Debian, CentOS и Arch Linux, приняли systemd в качестве системы init по умолчанию из-за ее скорости, эффективности и широкого набора функций.

Вы взаимодействуете с systemd в основном с помощью команды systemctl, которая дает вам полный контроль над службами, такими как запуск, остановка, включение, отключение, проверка статуса и многое другое.

Хотя systemd является текущим стандартом, стоит отметить, что существуют и другие системы init, с которыми вы можете столкнуться, особенно в старых или специализированных дистрибутивах.

  • SysVinit – традиционная система init, используемая в старых версиях 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       # For Debian/Ubuntu
sudo yum install htop       # For CentOS/RHEL
sudo dnf install htop       # For Fedora

После установки запустите htop, и вы получите гораздо более интерактивный способ проверки того, что работает под капотом.

Последние мысли* Сервисы* и демоны являются сердцем любой функционирующей системы Linux, поскольку они выполняют такие важные фоновые задачи, как управление SSH-соединениями, планирование заданий, обслуживание веб-контента, синхронизация системного времени и обеспечение соблюдения правил брандмауэра.

Эти компоненты тихо работают за кулисами, обеспечивая эффективную и надежную работу системы. Понимание того, как они работают и как эффективно управлять ими, является ключевой частью мастерства в системном администрировании Linux.

Как только вы поймете, как эффективно управлять сервисами и демонами, вы будете чувствовать себя намного увереннее в навигации и управлении вашей системой Linux.

Зарубин Иван Эксперт по Linux и Windows

Парашютист со стажем. Много читаю и слушаю подкасты. Люблю посиделки у костра, песни под гитару и приближающиеся дедлайны. Люблю путешествовать.

Похожие статьи

Комментарии (0)