> For the complete documentation index, see [llms.txt](https://denis-3.gitbook.io/linuxguide-linux-dlya-nachinayushikh/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://denis-3.gitbook.io/linuxguide-linux-dlya-nachinayushikh/servisy-sluzhby-i-demony.md).

# Сервисы (службы) и демоны

Когда Вы запускаете компьютер с Linux, после загрузки можно заметить много разных программ, работающих в фоне. Их запуск можно проследить даже при загрузке самой системы. Но что они из себя представляют?

Сервисы (службы) - программы, запускаемые при загрузке системы в фоне и продолжающие работать в фоне до завершения сеанса. Они не зависят от взаимодействия с пользователем, поэтому мы их не замечаем, хотя в работе системы они имеют очень важное значение. Существуют разные виды служб. Это сетевые, службы печати, службы управления безопасностью, службы мониторинга и т. д. Существует система инициализации, запускающая и управляющая этими службами. В большинстве дистрибутивов Linux - это systemd (Debian, Ubuntu, Fedora...). Но в некоторых дистрибутивах используются другие системы инициализации (SysV, Upstart). Пример с сервисами. Вы открыли браузер и ввели какой-нибудь сайт. Веб-сервис (apache, nginx) в это время обрабатывает запросы и даёт результат.

Демоны - это такие фоновые процессы, которые запускаются при старте системы и продолжают работать в фоне. Похоже на сервисы, да? Они не зависят ни от какого интерфейса. У демона есть цель. Чаще всего, это предоставление процессам и пользователю различных сервисов. Их имена обычно оканчиваются на *d*. Они управляют критически важными или сетевыми задачами, пока мы этого не замечаем. Приведу пару примеров. Вы включили принтер, чтобы что-то распечатать. Вы просто пускаете документ на печать, а дальше идёт работа демонов и служб. Демон печати (`cupsd`) следит за состоянием сетевых служб, управляет очередью печати, самой печатью (получение и отправка заданий на принтер) и сообщает о статусе. Сервис печати (`cups`) принимает и обрабатывает запросы, затем выдаёт результат. Ещё пример. Вы открываете веб-браузер и хотите открыть какой-либо сайт. После ввода, демон веб-сервера (`ngnix`, `httpd`) передаёт запрос сервису, который обрабатывает запрос, отвечает на него, формируя ответ из найденных данных или выполненных скриптов, и уже передаёт демону, который выводит в браузер пользователю. И таких демонов много. Выполнение задач по расписанию (`cron`), сбор системных данных (`syslogd`, `journald`), обеспечение взаимодействия между процессами (`dbus-daemon`) и т. д.

Логику работы и понятие отличий этих терминов можно представить в виде аналогии. Демон - почтовое отделение, отвечающее за приём, отправку и выдачу письма. Сервис - клиент (обработчик писем), который принимает от отделения письмо, читает его, формирует ответ (например, посылку), выполняя какие-то действия, и отдаёт почтовому отделению для отправки. Почтовое отделение передаёт ответ другому клиенту (нам), а мы передаём ещё письма (действиями в браузере) и так дальше по кругу.

Есть ещё примечание. Сервисы могут быть одновременно и сервисами, и демонами. То есть, им не нужен дополнительный "передатчик" для получения и отправки информации. Они делают всё сами. Например, веб-сервис `nginx`.

Научимся управлять службами.

## systemctl

Это утилита systemd для управления службами. Чтобы вывести список всех сервисов, загруженных в память, введите `systemctl list-units --type service`. Есть ещё альтернатива. `service --status-all`. Мы увидим список запущенных, загруженных в ядро служб и их состояние. По первому скриншоту (systemctl) можно увидеть разные столбцы. `UNIT` - название сервиса. `LOAD` - статус загрузки в ядро. `ACTIVE` - состояние сервиса, запущен или нет, `SUB` - более подробное состояние и `DESC` - описание сервиса. Список всех служб можно посмотреть через `systemctl list-unit-files`. Чтобы выйти, нажмите `q`.

<div><figure><img src="/files/9WCG9wNYxziVpOZY5zlj" alt=""><figcaption></figcaption></figure> <figure><img src="/files/bIdqqNeEIWsBMmJNtIVL" alt=""><figcaption></figcaption></figure></div>

<figure><img src="/files/nfi2mCF1YPcxmiODt97U" alt=""><figcaption></figcaption></figure>

Чтобы просмотреть завершённые с ошибкой сервисы, нужно ввести то же самое, но с ключом `--state` и состоянием `failed`. У меня это сервис проверки md5-сумм у ISO-образов для обеспечения достоверности источника загрузки. Необязательно, но может понадобится.

<figure><img src="/files/09s9iGymbCnHLTZJIkyy" alt=""><figcaption></figcaption></figure>

Для запуска сервиса используйте `systemctl start` и имя сервиса. Чтобы остановить сервис, введите `systemctl stop` и имя сервиса. Если появляется ошибка с загрузкой unit-ов, значит либо сервис не установлен (или установлен неправильно), либо ошибка в конфигурации. Попробую `bluetooth` и `cups`. Чтобы перезапустить сервис, просто вместо `start` или `stop` используйте `restart`.

<figure><img src="/files/aoSAPm2TzpXvzvYvXNgC" alt=""><figcaption></figcaption></figure>

Чтобы узнать состояние сервиса, введите `systemctl status` и имя сервиса. Вместо status можно написать `is-active` или `is-enabled` для краткого вывода. Чтобы выйти, нажмите `q`.

<figure><img src="/files/7SE2DqItnfUt7Vdivw7y" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/iPLLO7jsqsFiZVarkBfa" alt=""><figcaption></figcaption></figure>

Чтобы включить/выключить автозапуск какого-либо сервиса введите `systemctl enable/disable` имя сервиса. Команды такого рода лучше выполнять с `sudo`. Но Linux Mint так или иначе попросит пароль.

<figure><img src="/files/o9nvento1aRu5uc1hmHz" alt=""><figcaption></figcaption></figure>

Чтобы посмотреть все службы, автоматически запускаемые при загрузке системы, введите `systemctl list-unit-files | grep enabled`.

<figure><img src="/files/LLyAwEfsfKxqIkayZezk" alt=""><figcaption></figcaption></figure>

Существуют ещё пользовательские службы, не требующие прав суперпользователя. Посмотреть их список можно с помощью команды `systemctl --user list-unit-files --type service`.

<figure><img src="/files/O2sPWSsTkuJSBZmiwXgX" alt=""><figcaption></figcaption></figure>

Чтобы посмотреть журнал логов определённой службы, введите `journalctl -u <имя_службы> -f`.

<figure><img src="/files/rx7GMrovrc7gV0VTh9Wa" alt=""><figcaption></figcaption></figure>

С базовым управлением службами в Linux мы разобрались.
