В чем разница между перезапуском и перезагрузкой linux

Обновлено: 21.11.2024

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

Опции/действия управления

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

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

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

Оба типа действий независимы. Они влияют только на те состояния, которым они принадлежат. Это означает, что если служба включена во время загрузки, независимо от того, продолжите ли вы ее работу после процесса загрузки или остановите ее, она будет запущена в следующем процессе загрузки автоматически. И наоборот, если служба отключена во время загрузки, независимо от того, запустите вы ее после процесса загрузки или нет, она будет автоматически остановлена ​​в процессе следующей загрузки.

Служба всегда запускается под уникальным идентификатором. Этот идентификатор известен как PID. PID используется для отслеживания, контроля и управления службой.

Когда служба останавливается, ее PID также уничтожается. PID остановленной службы никогда не используется для повторного запуска этой службы. Если вы снова запустите эту службу, она будет использовать новый уникальный PID.

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

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

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

Команда systemctl

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

В следующей таблице перечислены команды для выполнения всех описанных выше действий/операций.

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

Чтобы проверить текущий статус службы, мы можем использовать следующую команду.

Это руководство является пятой частью статьи "Systemd в Linux с примерами". Ниже приведены другие части этой статьи.

Практические примеры

Следующая команда отображает полный/подробный статус sshd.service.

На следующем изображении показаны выходные данные этой команды.

Следующая команда отображает состояние загрузки sshd.service.

На следующем изображении показан вывод вышеуказанной команды.

Следующая команда отображает состояние выполнения sshd.service.

На следующем изображении показаны выходные данные вышеуказанной команды до и после активации и деактивации sshd.service.

Следующая команда останавливает sshd.service.

На следующем изображении показан вывод вышеуказанной команды.

Следующая команда снова запускает sshd.service.

На следующем изображении показаны выходные данные этой команды.

Следующая команда перезапускает sshd.service.

На следующем изображении показаны выходные данные этой команды.

Как видно из приведенного выше вывода, когда мы перезапускаем службу, PID службы меняется.

Следующая команда перезагружает sshd.service.

На следующем изображении показаны выходные данные этой команды.

Как видно из приведенного выше вывода, когда мы перезагружаем службу, PID службы не меняется.

Следующая команда включает sshd.service во время загрузки.

На следующем изображении показан вывод вышеуказанной команды.

Следующая команда отключает sshd.service во время загрузки.

На следующем изображении показан вывод вышеуказанной команды.

На этом уроке все. Если вам понравился этот урок, не забудьте поделиться им с друзьями в вашей любимой социальной сети.

Автор: ComputerNetworkingNotes Обновлено 02.11.2019, 08:47:15 IST

ComputerNetworkingNotes Linux Tutorials Как использовать команду systemctl для управления службами Systemd

Описание. Командлет Restart-Service отправляет стоп-сообщение, а затем стартовое сообщение контроллеру служб Windows для указанной службы. Если служба уже была остановлена, она запускается без уведомления об ошибке.

Как мне перезапустить службу в шпаклевке?

Как перезапустить сервер Linux с помощью клиента putty ssh в Windows

  1. Загрузить шпатлевку. Перейдите по этому адресу и получите пакет шпатлевки.
  2. Установите замазку. Просто дважды щелкните загруженный файл «putty-64bit-0.70-installer».
  3. Подключитесь к удаленному серверу Linux с помощью putty.
  4. Перезапустите сервер Linux с помощью клиента putty ssh.

Куда мне обратиться, чтобы запустить, остановить или перезапустить службу?

Откройте Диспетчер задач и перейдите на вкладку Службы. Примечание. Если вы не видите вкладок, нажмите кнопку «Подробнее». Щелкните правой кнопкой мыши службу в списке и выберите "Пуск", "Остановить" или "Перезапустить" в контекстном меню.

Как автоматически перезапустить службу в systemd?

Также обратите внимание, что для автоматического перезапуска службы systemd это должно быть настроено в его файле .service. From man 5 systemd.service: Restart= Настраивает, должна ли служба быть перезапущена, когда процесс службы завершается, завершается или истекает время ожидания.

Как работает командлет службы перезапуска в Windows 10?

Командлет Restart-Service отправляет стоп-сообщение, а затем стартовое сообщение контроллеру служб Windows для указанной службы. Если служба уже была остановлена, она запускается без уведомления об ошибке. Вы можете указать службы по их именам служб или отображаемым именам, или вы можете использовать параметр InputObject для передачи объекта

Когда перезапускать сервисный процесс в Java?

Restart= Настраивает, должна ли служба быть перезапущена, когда процесс службы завершается, завершается или истекает время ожидания. Служебный процесс может быть основным служебным процессом, но он также может быть одним из процессов, указанных с помощью ExecStartPre=, ExecStartPost=, ExecStop=, ExecStopPost= или ExecReload=.

Что такое перезагрузка Systemctl?

daemon-reload Перезагрузить конфигурацию диспетчера systemd. Их основная цель — динамическое преобразование файлов конфигурации, которые не являются собственными файлами модулей, в собственные файлы модулей. После установки новых генераторов или обновления конфигурации может быть выполнена перезагрузка демона systemctl.

Почему мы используем действие перезагрузки в Linux?

Reload Actions Активирует новую прошивку, если такой образ сохранен и ожидает активации. Если ограничение не указано, это действие может привести к сбросу прошивки. Если нет нового образа, ожидающего выполнения, это действие перезагрузит текущий образ встроенного ПО.

В чем разница между перезагрузкой Systemctl и перезапуском Systemctl?

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

Безопасно ли запускать перезагрузку демона Systemctl?

Daemon reload предназначен для systemd, а не для управляемых им юнит-файлов. Это безопасная команда для запуска, поскольку она держит сокеты открытыми, пока выполняет свою работу.

Как обновить оболочку?

Как перезагрузить оболочку bash? в вашем ~/. bash_aliases, вы можете просто использовать exec bash, который заменит ваш текущий образ оболочки новым, загрузит ваш файл конфигурации и позволит вам использовать обновленные псевдонимы в вашем текущем терминале.

Должен ли я использовать Systemctl или службу?

В зависимости от диспетчера службы «нижнего уровня» служба перенаправляет на разные двоичные файлы. service подходит для базового управления службами, а прямой вызов systemctl дает больше возможностей управления. systemctl — это, по сути, более мощная версия сервиса.

Что такое статус Systemctl?

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

В чем разница между перезагрузкой, перезапуском и перезапуском?

Reload сообщит сервису, что нужно перезагрузить файлы конфигурации, но тот же процесс останется запущенным. Перезапуск говорит ему полностью отключиться, а затем перезапустить. Вообще говоря, перезапуск останавливает рассматриваемую службу и перезапускает ее; reload перезагрузит только файл конфигурации.

В чем разница между «перезапуском службы…»?

В Руководстве по политике Debian указано, что каждый сценарий /etc/init.d/ должен поддерживать действие принудительной перезагрузки, что означает перезагрузку, если служба поддерживает это, и перезапуск, если служба не поддерживает перезагрузку. Я не уверен, как это переводится в современный мир выскочек Ubuntu. Чтобы расширить عبد النور التومي, ответьте на вопрос о моем опыте работы с systemd.

Есть ли способ перезагрузить сервер, не выключая его?

Некоторые службы, поддерживающие команду перезагрузки, могут перезагружать свою конфигурацию без полного завершения работы и повторного запуска. Postfix делает это, как и Apache. Это очень полезно, если вам нужно внести изменения в конфигурацию работающего сервера без простоя даже на несколько секунд.

Что делает reload в постфиксе Apache?

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

Возможно, я пропустил это, но есть ли где-нибудь хорошее объяснение различий между этими четырьмя командами? Я не видел, чтобы они обсуждались в онлайн-документации супервизора. Я заметил на ServerFault и Stackoverflow, что другие пользователи также не понимают их различий.

Например, если я изменяю конфигурацию в одном разделе программы, я знаю, что должен выполнить "supervisorctl reread", чтобы эти изменения стали доступными. Но как перезапустить только эту программу? Перезапуск supervisorctl не работает. Вместо этого, если кажется, что вы должны либо запустить «обновление supervisorctl», либо перезапустить сам демон супервизора. Однако это, по-видимому, приводит к непреднамеренному перезапуску всех программ, а не только той, которая была изменена.

Текст был успешно обновлен, но возникли следующие ошибки:

комментарий bfleming-ciena от 6 сентября 2016 г.

По-прежнему нахожу текущую документацию запутанной.

прокомментировал pawelad 13 декабря 2016 г.

прокомментировал pawelad 14 декабря 2016 г. •

@flaugher Я все еще думаю, что стоит оставить этот вопрос открытым, так как в документах все еще нет соответствующей информации.

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

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

13 декабря 2016 г., в 16:03, Paweł Adamczak ***@***.***> написал: @flaugher Я все еще думаю, что стоит оставить эту проблему открытой, так как документы до сих пор этого не делают. есть информация. На самом деле я планировал заняться пиаром на выходных. — Вы получаете это, потому что вас упомянули. Ответьте на это письмо напрямую, просмотрите его на GitHub или отключите обсуждение.

прокомментировал pawelad 14 декабря 2016 г.

Как не участник проекта или создатель проблемы, я не могу открыть его, но я полностью понимаю вашу точку зрения.

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

Напоследок - извините за спам :-)

ivanleoncz прокомментировал 24 января 2017 г.

ИМХО, я согласен с повторным открытием этого вопроса.

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

Что касается действия «обновить», я считаю, что есть больше вещей, которые нужно описать или описать, например, лучше.

Вот сценарий: когда вы создаете конфигурацию для процесса, которым будет управлять «supervisord», вы запускаете «supervisorctl update», а затем появляется сообщение «your_configured_process: добавлена ​​группа процессов». Существует ли какая-либо группа, контролируемая «супервизором», которая должна содержать запись, указывающую, что ваш процесс теперь управляется «супервидордом»?

Во время моих последних поисков в Google я также нашел эту справочную страницу на веб-сайте Ubuntu, и, похоже, там нет объяснений действий supervisorctl..

Может ли кто-нибудь (участник проекта) повторно открыть этот вопрос? Похоже, не я один считаю, что это необходимо сделать.

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

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

Обратите внимание, что несмотря на то, что systemd стала системой инициализации по умолчанию для многих дистрибутивов Linux, она не реализована повсеместно во всех дистрибутивах. Если во время выполнения этого руководства ваш терминал выводит ошибку bash: systemctl не установлена, вероятно, на вашем компьютере установлена ​​другая система инициализации.

Управление услугами

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

В systemd целью большинства действий являются «юниты», то есть ресурсы, которыми systemd умеет управлять. Модули классифицируются по типу ресурсов, которые они представляют, и определяются с помощью файлов, известных как файлы модулей. Тип каждого блока можно определить по суффиксу в конце файла.

Для задач управления службами целевой единицей будут единицы службы, файлы которых имеют суффикс .service . Однако для большинства команд управления службами вы можете вообще не использовать суффикс .service, поскольку systemd достаточно умен, чтобы знать, что вы, вероятно, захотите работать со службой при использовании команд управления службами.

Запуск и остановка служб

Чтобы запустить службу systemd, выполняя инструкции в файле модуля службы, используйте команду start. Если вы работаете как пользователь без полномочий root, вам придется использовать sudo, так как это повлияет на состояние операционной системы:

Как мы упоминали выше, systemd знает, что нужно искать файлы *.service для команд управления службами, поэтому команда может быть набрана следующим образом:

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

Чтобы остановить текущую службу, вы можете использовать команду остановки:

Перезапуск и перезагрузка

Чтобы перезапустить запущенную службу, вы можете использовать команду перезапуска:

Если рассматриваемое приложение может перезагрузить свои файлы конфигурации (без перезапуска), вы можете ввести команду reload, чтобы инициировать этот процесс:

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

Включение и отключение служб

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

Чтобы запустить службу при загрузке, используйте команду enable:

Это создаст символическую ссылку из системной копии служебного файла (обычно в /lib/systemd/system или /etc/systemd/system ) на место на диске, где systemd ищет файлы автозапуска (обычно /etc/ systemd/system/ some_target .target.wants . Что такое цель, мы рассмотрим позже в этом руководстве).

Чтобы отключить автоматический запуск службы, введите:

Это удалит символическую ссылку, указывающую, что служба должна запускаться автоматически.

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

Проверка статуса служб

Чтобы проверить статус службы в вашей системе, вы можете использовать команду status:

Это предоставит вам состояние службы, иерархию cgroup и первые несколько строк журнала.

Например, при проверке состояния сервера Nginx вы можете увидеть такой вывод:

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

Существуют также методы проверки определенных состояний. Например, чтобы проверить, активен ли юнит в данный момент (работает), вы можете использовать команду is-active:

Это вернет текущее состояние объекта, которое обычно активно или неактивно. Код выхода будет «0», если он активен, что упрощает анализ результата в сценариях оболочки.

Чтобы узнать, включено ли устройство, вы можете использовать команду is-enabled:

Это покажет, включена или отключена служба, и снова установит код выхода «0» или «1» в зависимости от ответа на командный вопрос.

Третья проверка — находится ли устройство в неисправном состоянии. Это указывает на то, что возникла проблема с запуском рассматриваемого устройства:

Это вернет активное значение, если оно работает правильно, или сбой, если произошла ошибка. Если устройство было намеренно остановлено, оно может вернуть unknown или inactive . Статус выхода "0" означает, что произошел сбой, а статус выхода "1" указывает на любой другой статус.

Обзор состояния системы

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

Список текущих единиц

Чтобы увидеть список всех активных юнитов, о которых знает systemd, мы можем использовать команду list-units:

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

Вывод содержит следующие столбцы:

  • UNIT: название подразделения systemd.
  • ЗАГРУЗКА: была ли конфигурация устройства проанализирована systemd. Конфигурация загруженных объектов сохраняется в памяти.
  • АКТИВЕН: сводка о том, активен ли объект. Обычно это довольно простой способ определить, успешно ли запущено устройство.
  • SUB: это состояние более низкого уровня, которое указывает более подробную информацию об устройстве. Это часто зависит от типа модуля, состояния и фактического метода, в котором работает модуль.
  • ОПИСАНИЕ: краткое текстовое описание того, чем является/делает устройство.

Поскольку команда list-units по умолчанию показывает только активные юниты, все записи выше будут отображаться как загруженные в столбце LOAD и активные в столбце ACTIVE. Это отображение на самом деле является поведением systemctl по умолчанию при вызове без дополнительных команд, поэтому вы увидите то же самое, если вызовете systemctl без аргументов:

Мы можем указать systemctl выводить другую информацию, добавив дополнительные флаги. Например, чтобы увидеть все юниты, которые systemd загрузил (или пытался загрузить), независимо от того, активны ли они в данный момент, вы можете использовать флаг --all, например:

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

Вы можете использовать другие флаги для фильтрации этих результатов. Например, мы можем использовать флаг --state=, чтобы указать состояния LOAD, ACTIVE или SUB, которые мы хотим видеть. Вам придется сохранить флаг --all, чтобы systemctl позволял отображать неактивные юниты:

Другим распространенным фильтром является фильтр --type=. Мы можем указать systemctl отображать только единицы интересующего нас типа. Например, чтобы увидеть только активные единицы обслуживания, мы можем использовать:

Список всех файлов модулей

Команда list-units отображает только единицы, которые systemd пыталась проанализировать и загрузить в память. Поскольку systemd будет считывать только те модули, которые, по его мнению, ему нужны, это не обязательно будет включать все доступные модули в системе. Чтобы увидеть каждый доступный модульный файл в путях systemd, включая те, которые systemd не пытался загрузить, вместо этого вы можете использовать команду list-unit-files:

Единицы — это представления ресурсов, о которых знает systemd. Поскольку systemd не обязательно считывает все определения юнитов в этом представлении, он предоставляет информацию только о самих файлах. Вывод имеет два столбца: файл модуля и состояние.

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

Сейчас мы рассмотрим, что означает маска.

Управление объектами

До сих пор мы работали со службами и отображали информацию о юнитах и ​​юнит-файлах, о которых знает systemd.Однако мы можем узнать более конкретную информацию о юнитах с помощью некоторых дополнительных команд.

Отображение файла модуля

Чтобы отобразить файл модуля, который systemd загрузил в свою систему, вы можете использовать команду cat (она была добавлена ​​в systemd версии 209). Например, чтобы просмотреть модульный файл демона планирования atd, можно ввести:

Выходным файлом является юнит-файл, известный текущему запущенному процессу systemd. Это может быть важно, если вы недавно изменяли юнит-файлы или если вы переопределяете определенные параметры во фрагменте юнит-файла (мы рассмотрим это позже).

Отображение зависимостей

Чтобы увидеть дерево зависимостей объекта, вы можете использовать команду list-dependencies:

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

Рекурсивные зависимости отображаются только для единиц .target, которые указывают состояния системы. Чтобы рекурсивно вывести список всех зависимостей, включите флаг --all.

Чтобы отобразить обратные зависимости (единицы, зависящие от указанной единицы), можно добавить в команду флаг --reverse. Другими полезными флагами являются флаги --before и --after, которые можно использовать для отображения юнитов, которые зависят от указанного юнита, начинающегося до и после себя соответственно.

Проверка свойств объекта

Чтобы просмотреть низкоуровневые свойства объекта, вы можете использовать команду show. Это отобразит список свойств, заданных для указанного объекта в формате ключ=значение:

Если вы хотите отобразить одно свойство, вы можете передать флаг -p с именем свойства. Например, чтобы просмотреть конфликты модуля sshd.service, введите:

Маскирование и демаскирование юнитов

В разделе управления службами мы видели, как остановить или отключить службу, но systemd также имеет возможность пометить единицу как полностью не запускаемую автоматически или вручную, связав ее с /dev/ нулевой . Это называется маскированием объекта и возможно с помощью команды mask:

Это предотвратит запуск службы Nginx автоматически или вручную, пока она маскируется.

Если вы проверите list-unit-files , вы увидите, что служба теперь указана как замаскированная:

Если вы попытаетесь запустить службу, вы увидите следующее сообщение:

Чтобы размаскировать юнит, сделав его снова доступным для использования, используйте команду unmask:

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

Редактирование файлов объектов

Хотя конкретный формат юнит-файлов выходит за рамки этого руководства, systemctl предоставляет встроенные механизмы для редактирования и изменения юнит-файлов, если вам нужно внести коррективы. Эта функция была добавлена ​​в systemd версии 218.

Команда редактирования по умолчанию открывает фрагмент файла объекта для рассматриваемого объекта:

Это будет пустой файл, который можно использовать для переопределения или добавления директив в определение устройства. В каталоге /etc/systemd/system будет создан каталог, содержащий имя устройства с добавлением .d. Например, для nginx.service будет создан каталог с именем nginx.service.d.

В этом каталоге будет создан фрагмент с именем override.conf . Когда юнит загружен, systemd в памяти объединит фрагмент переопределения с полным файлом юнита. Директивы фрагмента будут иметь приоритет над теми, которые находятся в исходном файле модуля.

Если вы хотите отредактировать весь файл модуля вместо создания фрагмента, вы можете передать флаг --full:

Это загрузит текущий файл модуля в редактор, где его можно изменить. Когда редактор закроется, измененный файл будет записан в /etc/systemd/system, что будет иметь приоритет над определением модуля системы (обычно находится где-то в /lib/systemd/system).

Чтобы удалить любые сделанные вами дополнения, удалите каталог конфигурации .d устройства или измененный служебный файл из /etc/systemd/system. Например, чтобы удалить фрагмент, мы можем ввести:

Чтобы удалить полностью измененный файл модуля, введите:

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

Настройка состояния системы (уровня запуска) с помощью целей

Цели — это специальные файлы модулей, описывающие состояние системы или точку синхронизации. Как и другие модули, файлы, определяющие цели, можно идентифицировать по суффиксу, в данном случае — .target. Цели сами по себе мало что делают, вместо этого они используются для группировки других юнитов.

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

Например, существует swap.target, который указывает, что swap готов к использованию. Единицы, которые являются частью этого процесса, могут синхронизироваться с этой целью, указав в своей конфигурации, что они WantedBy= или RequiredBy= swap.target . Единицы, для которых требуется замена, могут указать это условие, используя спецификации Wants= , Requires= и After= , чтобы указать характер их взаимосвязи.

Получение и установка цели по умолчанию

У процесса systemd есть цель по умолчанию, которую он использует при загрузке системы. Удовлетворение каскада зависимостей от этой единственной цели приведет систему в желаемое состояние. Чтобы найти цель по умолчанию для вашей системы, введите:

Если вы хотите установить другую цель по умолчанию, вы можете использовать set-default . Например, если у вас установлен графический рабочий стол и вы хотите, чтобы система загружалась в него по умолчанию, вы можете соответствующим образом изменить цель по умолчанию:

Список доступных целей

Вы можете получить список доступных целей в вашей системе, набрав:

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

Изоляция целей

Можно запустить все модули, связанные с целью, и остановить все модули, не входящие в дерево зависимостей. Команда, которая нам нужна для этого, называется isolate. Это похоже на изменение уровня выполнения в других системах инициализации.

Например, если вы работаете в графической среде с активным graphical.target, вы можете выключить графическую систему и перевести систему в состояние многопользовательской командной строки, изолировав multi-user.target . Поскольку graphical.target зависит от multi-user.target, а не наоборот, все графические блоки будут остановлены.

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

Когда вас устраивают юниты, которые останутся в живых, вы можете изолировать цель, набрав:

Использование ярлыков для важных событий

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

Например, чтобы перевести систему в режим спасения (однопользовательский), вы можете использовать команду восстановления вместо команды isolate save.target :

Это обеспечит дополнительную функциональность оповещения всех вошедших в систему пользователей о событии.

Чтобы остановить систему, вы можете использовать команду halt:

Чтобы инициировать полное отключение, вы можете использовать команду poweroff:

Перезапуск можно запустить с помощью команды reboot:

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

Например, чтобы перезагрузить систему, обычно можно ввести:

Заключение

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

Хотя systemctl работает в основном с основным процессом systemd, в экосистеме systemd есть и другие компоненты, которые контролируются другими утилитами. Другие возможности, такие как управление журналами и пользовательские сеансы, обрабатываются отдельными демонами и утилитами управления (Journald/Journalctl и Logind/loginctl соответственно). Ознакомление с другими инструментами и демонами поможет упростить управление.

Хотите узнать больше? Присоединяйтесь к сообществу DigitalOcean!

Присоединяйтесь к нашему сообществу DigitalOcean, насчитывающему более миллиона разработчиков, бесплатно! Получайте помощь и делитесь знаниями в нашем разделе "Вопросы и ответы", находите руководства и инструменты, которые помогут вам расти как разработчику и масштабировать свой проект или бизнес, а также подписывайтесь на интересующие вас темы.

Читайте также: