Введение в systemd: Практическое руководство

< Systemd 入门教程:命令篇

Введение в systemd: Практическое руководство

Автор: Руань Ифэн

Дата: 8 марта 2016 года

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

1. Включение компьютера

Для тех программ, которые поддерживают Systemd, во время установки они автоматически будут в /usr/lib/systemd/system Добавьте файл конфигурации в каталог. Если вы хотите, чтобы это программное обеспечение запускалось при загрузке, выполните следующую команду (в качестве httpd.service в качестве примера).

Вышеупомянутая команда эквивалентна в /etc/systemd/system Добавить символическую ссылку в каталог, указывающую на /usr/lib/systemd/system внутри httpd.service Файл. Это связано с тем, что при включении, Systemd Только выполнять /etc/systemd/system Конфигурационные файлы в каталоге. Это также означает, что если изменить конфигурационный файл и поместить его в этот каталог, можно достичь эффекта замены оригинальной конфигурации.

Второе. Запуск службы

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

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

Вывод выше означает следующее.

Loaded行: расположение конфигурационного файла, установить ли его для автозагрузки. Активный: означает, что работает. Основной PID: основной идентификатор процесса Статус: текущее состояние программного обеспечения, предоставляемого самим приложением (в данном случае httpd). CGroup блок: все подпроцессы приложения Журнал блока: журналы приложения

Три. Прекращение обслуживания

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

有时候,该命令可能没有响应,服务停不下来。这时候就不得不"杀进程"了,向正在运行的进程发出 kill Сигнал.

Кроме того, необходимо выполнить перезапуск службы. systemctl restart Команда.

Четыре. Понять конфигурационный файл.

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

Ранее говорилось, что конфигурационные файлы в основном находятся в /usr/lib/systemd/system Содержимое, возможно, также в /etc/systemd/system Содержание. Найдите файл конфигурации, затем откройте его с помощью текстового редактора. systemctl cat Команда может быть использована для просмотра конфигурационного файла, ниже приведено. sshd.service Файл служит примером, его задача - запустить SSH-сервер, чтобы другие пользователи могли входить через SSH.

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

Ниже последовательно объясняется содержание каждого блока.

Пятый, [Блок] единицы: порядок запуска и зависимости.

Unit блока Description Поле содержит простое описание текущей услуги. Documentation Поле указывает местоположение документа. Следующие настройки - это порядок запуска и зависимости, что довольно важно.

After Поле: обозначает если network.target или sshd-keygen.service Нужно запустить, тогда sshd.service Следует запустить их после этого.

Соответственно, есть еще один. Before поле, определение sshd.service Следует запустить перед какими услугами. Обратите внимание, After и Before Поле касается только порядка запуска, не затрагивая зависимости.

например, веб-приложение нуждается в базе данных postgresql для хранения данных. В конфигурационном файле оно просто определяет, что должно запускаться после postgresql, но не указывает зависимость от postgresql. После выхода в продуктив, по какой-то причине, postgresql нужно перезапустить, и во время остановки службы веб-приложение не сможет установить соединение с базой данных. Чтобы установить зависимость, необходимо использовать Wants поле и Requires Поле.

Wants Поле: обозначает sshd.service и sshd-keygen.service 之间存在"弱依赖"关系,即如果"sshd-keygen.service"启动失败或停止运行,不影响 sshd.service Продолжайте выполнять.

Requires 字段则表示"强依赖"关系,即如果该服务启动失败或异常退出,那么 sshd.service Также нужно выйти.

Обратите внимание, Wants поля и Requires Поле касается только зависимостей и не связано с порядком запуска, по умолчанию они запускаются одновременно.

Шесть, [Сервис] Блок: Запуск действия

Service Как определить блок для запуска текущей службы.

6.1 Команда запуска

Многое программное обеспечение имеет свои файлы параметров окружения, которые можно использовать для EnvironmentFile Чтение полей.

EnvironmentFile Поле: Укажите файл параметров окружения для текущей службы. Внутри этого файла key=value Парные ключи, можно использовать $key в форме, получаемой в текущем конфигурационном файле.

В приведенном примере файл переменных окружения для sshd - это /etc/sysconfig/sshd Самое важное поле в конфигурационном файле — это ExecStart

ExecStart Поле: Определяет команду, выполняемую при запуске процесса.

В приведённом выше примере, запуск. sshd исполняемая команда это /usr/sbin/sshd -D $OPTIONS в которых переменные $OPTIONS просто из EnvironmentFile Параметры среды, указанные в поле. Существуют и другие поля с аналогичным воздействием.

ExecReload Поле: Команда, выполняемая при перезапуске службы

ExecStop Поле: Команда, выполняемая при остановке службы

ExecStartPre Поле: Команда, выполняемая перед запуском службы

ExecStartPost Поле: Команда, выполняемая после запуска службы

ExecStopPost Поле: Команда, выполняемая после остановки службы

Пожалуйста, посмотрите на следующий пример.

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

Перед всеми настройками запуска можно добавить дефис. - ),表示"抑制错误",即发生错误的时候,不影响其他命令的执行。比如, EnvironmentFile=-/etc/sysconfig/sshd (Обратите внимание на дефис после знака равенства), это означает, что даже если. /etc/sysconfig/sshd Файл не существует и не выдаст ошибку.

6.2 Тип запуска

Type Определение поля типа запуска. Возможные значения для него следующие.

простой (значение по умолчанию): ExecStart Процесс запуска поля является главным процессом.

forking: ExecStart Поле будет заполнено fork() Запуск в таком режиме приведет к тому, что родительский процесс завершится, а дочерний процесс станет основным процессом.

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

dbus: аналогично simple но будет запущен после получения сигнала D-Bus

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

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

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

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

6.3 Перезагрузка поведения

Service В блоке есть некоторые поля, определяющие поведение перезапуска.

KillMode Поле: Определяет, как Systemd останавливает службу sshd.

В приведенном выше примере,将 KillMode Установить как process Это означает, что останавливается только главный процесс, а все дочерние процессы sshd продолжают работать, то есть открытые дочерними процессами SSH-сессии остаются подключенными. Эта настройка не очень распространена, но она важна для sshd, иначе при остановке службы вы также убьете свои собственные открытые SSH-сессии.

KillMode Настройки полей могут быть следующими.

control-group (значение по умолчанию): все дочерние процессы в текущей контрольной группе будут убиты.

процесс: убить только главный процесс

Смешанный: основной процесс получит сигнал SIGTERM, а дочерний процесс получит сигнал SIGKILL.

Никакие процессы не будут убиты, просто выполняется команда остановки сервиса.

Далее идет Restart Поле.

Restart Поле: определяет способ перезапуска Systemd после выхода sshd.

В приведенном выше примере, Restart Установить как on-failure в случае любого неожиданного сбоя будет перезапущен sshd. Если sshd завершится нормально (например, при выполнении systemctl stop Команда), она не перезагрузится.

Restart Настройки полей могут быть следующими.

нет (значение по умолчанию): после выхода не будет перезапуска

on-success: перезапуск будет осуществлен только при нормальном завершении (код завершения 0).

on-failure: перезапуск будет происходить только в случае ненормального завершения (код выхода не равен 0), включая завершение по сигналу и таймаут.

on-abnormal: Перезапуск будет происходить только при завершении сигнала и таймаута.

on-abort: перезапустится только при получении сигнала завершения, который не был перехвачен.

on-watchdog: перезапуск только в случае выхода по таймауту.

всегда: независимо от причины выхода, всегда перезапускайте.

Для демонов рекомендуется установить on-failure Для тех услуг, которые допускают ошибочный выход, можно установить on-abnormal

в конце это RestartSec Поле.

RestartSec Поле: указывает количество секунд, которое необходимо подождать перед перезапуском службы Systemd. В приведенном выше примере установлено ожидание в 42 секунды.

Семь, [Установка] блок

Install Блок, определите, как установить этот конфигурационный файл, то есть как сделать его запуск при включении.

WantedBy Поле: указывает на цель, к которой относится данная служба.

Target означает группу услуг, обозначающую набор сервисов. WantedBy=multi-user.target имеется в виду, что целевая система, в которой находится sshd, это multi-user.target Это настройка очень важна, потому что выполнение systemctl enable sshd.service при команде, sshd.service символическая ссылка будет помещена в /etc/systemd/system под каталогом multi-user.target.wants В подкаталоге. У systemd есть целевой запуск по умолчанию.

Результат выше показывает, что целевой запуск по умолчанию — это multi-user.target Все службы в этой группе будут запускаться при загрузке. Вот почему. systemctl enable Причина, по которой команды могут настраивать автозагрузку, заключается в том, что при использовании Target, systemctl list-dependencies команды и systemctl isolate Команды тоже очень полезны.

В общем, обычно используются два основных Target: один из них это multi-user.target , указывающий на состояние командной строки для нескольких пользователей; другой - это graphical.target это обозначает состояние графического пользователя, оно зависит от multi-user.target Официальный документ содержит очень четкое изображение. Целевая зависимость графа

Восьмое. Конфигурационный файл Target.

У Target также есть собственный конфигурационный файл.

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

Requires Поле: Требования basic.target Запустим вместе.

Conflicts Поле: конфликтующее поле. Если rescue.service или rescue.target В процессе работы. multi-user.target Не может работать, и наоборот.

After : обозначает multi-user.target в наличии basic.target rescue.service rescue.target Затем запустите, если они имеют запуск.

AllowIsolate Разрешено использовать systemctl isolate Переключить на multi-user.target

Девять. Перезагрузите после изменения конфигурационного файла.

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

(Конец)

Информация о документе

Авторское заявление: Свободное воспроизведение - некоммерческое - без производных - с указанием авторства ( Лицензия Creative Commons 3.0

Дата публикации: 8 марта 2016 года

Вы недавно использовали:

收藏 - Коллекция Меню QQ