Systemd: больше, чем просто демон.

Система, с которой я познакомлю вас сегодня, имеет огромное значение в мире Linux. Она отвечает за загрузку, управление запущенными процессами, запись и хранение логов, а также многое другое в Ubuntu и большинстве дистрибутивов, основанных на ядре Linux. 

Знакомьтесь: systemd, система инициализации демонов.

Цикл статей о systemd:
  1. Systemd: больше, чем просто демон.

  2. Systemd как средство диагностики неисправностей в Linux.

Что еще за демоны?

Демоны (они же сервисы или службы) — это программы, работающие в фоновом режиме. Они не имеют графического интерфейса и даже не привязаны к конкретному окну терминала. Получив команду, они выполняют действие, для которого были созданы, а все остальное время находятся в режиме ожидания. Например, демон печати cupsd ставит в очередь документы, отправленные на печать, а затем посылает их на принтер.

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

Экскурс в историю.

14 февраля 2014 года основатель дистрибутива Ubuntu Марк Шаттлворт опубликовал запись, которая всколыхнула сообщество Linux. В этой записи речь шла о том, что Ubuntu, как и многие другие дистрибутивы, переходит на систему инициализации systemd. До этого, начиная с версии 6.10, использовался менеджер служб Upstart, который, в свою очередь, сменил значительно более старый init. 

Споры вокруг нововведения ведутся до сих пор. Критики утверждают:
  • на systemd возложено слишком уж много задач, что противоречит философии Unix;
  • в связи с переходом потребуется немало усилий для адаптации серверов;

Cторонники приводят свои аргументы:
  • Upstart морально устарела и замена была необходима;
  • systemd ускоряет загрузку благодаря параллельному запуску демонов.
  • включение в systemd дополнительных функций вроде ведения системных логов и автомонтирования делает администрирование более удобным.

Несмотря на возражения, переход состоялся, поэтому давайте разберемся с базовым использованием этой системы.

Управление сервисами через systemd.

Начнем с простой задачи — узнать, какие сервисы запущены в данный момент. Для обращения к systemd используется команда systemctl. Введя в терминал
systemctl list-units -t service
получим примерно следующее:

В данном случае запущено 65 сервисов. Давайте разберем вышеприведенную команду по частям:
systemctl — обращаемся к systemd;
list-units — вывести список юнитов (в следующих статьях я объясню, что это такое);
-t — ключ, означающий, что далее мы укажем тип юнита (в нашем случае это сервис).

В списке на скриншоте присутствует cups.service. Это служба печати. Предположим, что принтера у меня нет, зато есть старый компьютер, на котором каждый запущенный сервис съедает драгоценные мегабайты памяти и замедляет загрузку. Как мне сделать так, чтобы сервис не запускался автоматически? Для этого существует команда
sudo systemctl disable cups

Вместо cups можно подставить название любого другого демона, который вы желаете исключить из автозагрузки. При необходимости его легко можно будет вернуть командой 
sudo systemctl enable название_демона

Для немедленной остановки служит команда
sudo systemctl stop название_демона
А для немедленного запуска
sudo systemctl start название_демона
Предположим, мне нужно проверить, запущен ли в данный момент веб-сервер Apache. Вот так это можно сделать:
systemctl status apache2
Обратите внимание! Чтобы получить информацию о запущенных сервисах, достаточно прав обычного юзера. Для выполнения каких-либо манипуляций потребуются права суперпользователя, поэтому мы действуем через sudo. Вы ведь не используете учетную запись root постоянно, не правда ли? Если все-таки да, советую покончить с этой привычкой как можно быстрее.
Хотите проверить, какие сервисы были остановлены в аварийном режиме? Пожалуйста:
systemctl list-units -t service --failed

В моем случае таковых нет. Кстати, совсем забыл, включил ли я Apache в автозагрузку. Давайте выясним это:
systemctl is-enabled apache2

Вывод команды на скриншоте говорит о том, что apache после перезагрузки запустится самостоятельно (enabled). А также о том, что старые системы инициализации демонов оставлены в Ubuntu 16.04 (и выше) для совместимости.

P.S.

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

Поделиться:

Если у Вас возникли вопросы.

Приглашаю задавать их на сервисе вопросов и ответов: Ask LinuxRussia.com.
Там Ваши вопросы не потеряются и Вы быстрее получите ответ, в отличие от комментариев.

Комментариев нет :

Отправить комментарий