Что еще за демоны?
Демоны (они же сервисы или службы) — это программы, работающие в фоновом режиме. Они не имеют графического интерфейса и даже не привязаны к конкретному окну терминала. Получив команду, они выполняют действие, для которого были созданы, а все остальное время находятся в режиме ожидания. Например, демон печати cupsd ставит в очередь документы, отправленные на печать, а затем посылает их на принтер.
Systemd используется в качестве главного демона. Во время загрузки systemd инициализирует все прочие сервисы и управляет их работой вплоть до выключения. При необходимости мы можем запустить или остановить нужный процесс, назначить или отменить его автоматический запуск или даже создать собственный сервис.
Экскурс в историю.
14 февраля 2014 года основатель дистрибутива Ubuntu Марк Шаттлворт опубликовал запись, которая всколыхнула сообщество Linux. В этой записи речь шла о том, что Ubuntu, как и многие другие дистрибутивы, переходит на систему инициализации systemd. До этого, начиная с версии 6.10, использовался менеджер служб Upstart, который, в свою очередь, сменил значительно более старый init.
Споры вокруг нововведения ведутся до сих пор.
Критики утверждают:
- на systemd возложено слишком уж много задач, что противоречит философии Unix;
- в связи с переходом потребуется немало усилий для адаптации серверов;
Cторонники приводят свои аргументы:
- Upstart морально устарела и замена была необходима;
- systemd ускоряет загрузку благодаря параллельному запуску демонов;
- включение в systemd дополнительных функций вроде ведения системных логов и автомонтирования делает администрирование более удобным;
Несмотря на возражения, переход состоялся, поэтому давайте разберемся с базовым использованием этой системы.
Управление сервисами через systemd.
Начнем с простой задачи — узнать, какие сервисы запущены в данный момент. Для обращения к systemd используется команда systemctl. Введя в терминал:
получим примерно следующее:
В данном случае запущено 65 сервисов.
Давайте разберем вышеприведенную команду по частям:
systemctl — обращаемся к systemd;
list-units — вывести список юнитов (в следующих статьях я объясню, что это такое);
-t — ключ, означающий, что далее мы укажем тип юнита (в нашем случае это сервис).
В списке на скриншоте присутствует cups.service. Это служба печати. Предположим, что принтера у меня нет, зато есть старый компьютер, на котором каждый запущенный сервис съедает драгоценные мегабайты памяти и замедляет загрузку. Как мне сделать так, чтобы сервис не запускался автоматически? Для этого существует команда:
Вместо cups можно подставить название любого другого демона, который вы желаете исключить из автозагрузки. При необходимости его легко можно будет вернуть командой:
Для немедленной остановки служит команда:
А для немедленного запуска:
Предположим, мне нужно проверить, запущен ли в данный момент веб-сервер Apache. Вот так это можно сделать:
Обратите внимание!
Чтобы получить информацию о запущенных сервисах, достаточно прав обычного юзера. Для выполнения каких-либо манипуляций потребуются права суперпользователя, поэтому мы действуем через sudo
. Вы ведь не используете учетную запись root постоянно, не правда ли? Если все-таки да, советую покончить с этой привычкой как можно быстрее.
Хотите проверить, какие сервисы были остановлены в аварийном режиме? Пожалуйста:
В моем случае таковых нет. Кстати, совсем забыл, включил ли я Apache в автозагрузку. Давайте выясним это:
Вывод команды на скриншоте говорит о том, что apache после перезагрузки запустится самостоятельно (enabled). А также о том, что старые системы инициализации демонов оставлены в Ubuntu 16.04 (и выше) для совместимости.
P.S.
Возможности systemd очень велики. В следующих статьях я покажу, как с помощью этого инструмента выключать и перезагружать компьютер, искать интересующие нас записи в логах и даже автоматизировать некоторые привычные действия.