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

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

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

получим примерно следующее:

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

В данном случае запущено 65 сервисов.

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

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

sudo systemctl disable cups

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

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

sudo systemctl enable название_демона

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

Для немедленной остановки служит команда:

sudo systemctl stop название_демона

А для немедленного запуска:

sudo systemctl start название_демона

Предположим, мне нужно проверить, запущен ли в данный момент веб-сервер Apache. Вот так это можно сделать:

systemctl status apache2

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

Обратите внимание!
Чтобы получить информацию о запущенных сервисах, достаточно прав обычного юзера. Для выполнения каких-либо манипуляций потребуются права суперпользователя, поэтому мы действуем через sudo. Вы ведь не используете учетную запись root постоянно, не правда ли? Если все-таки да, советую покончить с этой привычкой как можно быстрее.

Хотите проверить, какие сервисы были остановлены в аварийном режиме? Пожалуйста:

systemctl list-units -t service --failed

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

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

systemctl is-enabled apache2

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

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

P.S.

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


Комментарии отключены