Введение в systemd: Практическое руководство 1. Включение компьютера Второе. Запуск службы Три. Прекращение обслуживания Четыре. Понять конфигурационный файл. Пятый, [Блок] единицы: порядок запуска и зависимости. Шесть, [Сервис] Блок: Запуск действия 6.1 Команда запуска 6.2 Тип запуска 6.3 Перезагрузка поведения Семь, [Установка] блок Восьмое. Конфигурационный файл Target. Девять. Перезагрузите после изменения конфигурационного файла. Информация о документе
Автор: Руань Ифэн
Дата: 8 марта 2016 года
В предыдущей статье я представил Systemd. Основные команды Сегодня я расскажу, как использовать его для выполнения некоторых основных задач.
Для тех программ, которые поддерживают Systemd, во время установки они автоматически будут в
/usr/lib/systemd/system
Добавьте файл конфигурации в каталог. Если вы хотите, чтобы это программное обеспечение запускалось при загрузке, выполните следующую команду (в качестве
httpd.service
в качестве примера).
$ sudo systemctl enable httpd
Вышеупомянутая команда эквивалентна в
/etc/systemd/system
Добавить символическую ссылку в каталог, указывающую на
/usr/lib/systemd/system
внутри
httpd.service
Файл. Это связано с тем, что при включении,
Systemd
Только выполнять
/etc/systemd/system
Конфигурационные файлы в каталоге. Это также означает, что если изменить конфигурационный файл и поместить его в этот каталог, можно достичь эффекта замены оригинальной конфигурации.
После настройки автозапуска программа не запустится сразу, нужно дождаться следующего включения компьютера. Если вы хотите запустить программу сейчас, выполните
systemctl
start
Команда. После установки автозапуска программа не запустится немедленно, она начнет работать только при следующем включении. Если вы хотите запустить программу сейчас, вам нужно выполнить
systemctl start
Команда.
x
$ sudo systemctl start httpd
После выполнения команды выше может возникнуть ошибка при запуске, поэтому необходимо использовать
systemctl
status
Команда для проверки состояния этой службы.
x
$ sudo systemctl status httpd
httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled)
Active: active (running) since 金 2014-12-05 12:18:22 JST; 7min ago
Main PID: 4349 (httpd)
Status: "Total requests: 1; Current requests/sec: 0; Current traffic: 0 B/sec"
CGroup: /system.slice/httpd.service
├─4349 /usr/sbin/httpd -DFOREGROUND
├─4350 /usr/sbin/httpd -DFOREGROUND
├─4351 /usr/sbin/httpd -DFOREGROUND
├─4352 /usr/sbin/httpd -DFOREGROUND
├─4353 /usr/sbin/httpd -DFOREGROUND
└─4354 /usr/sbin/httpd -DFOREGROUND
12月 05 12:18:22 localhost.localdomain systemd[1]: Starting The Apache HTTP Server...
12月 05 12:18:22 localhost.localdomain systemd[1]: Started The Apache HTTP Server.
12月 05 12:22:40 localhost.localdomain systemd[1]: Started The Apache HTTP Server.
Вывод выше означает следующее.
Loaded行: расположение конфигурационного файла, установить ли его для автозагрузки. Активный: означает, что работает. Основной PID: основной идентификатор процесса Статус: текущее состояние программного обеспечения, предоставляемого самим приложением (в данном случае httpd). CGroup блок: все подпроцессы приложения Журнал блока: журналы приложения
Необходимо выполнить остановку работающей службы.
systemctl stop
Команда.
xxxxxxxxxx
$ sudo systemctl stop httpd.service
有时候,该命令可能没有响应,服务停不下来。这时候就不得不"杀进程"了,向正在运行的进程发出
kill
Сигнал.
xxxxxxxxxx
$ sudo systemctl kill httpd.service
Кроме того, необходимо выполнить перезапуск службы.
systemctl restart
Команда.
x
$ sudo systemctl restart httpd.service
Как запускается сервис, полностью зависит от его конфигурационного файла. Давайте посмотрим, что содержится в конфигурационном файле.
Ранее говорилось, что конфигурационные файлы в основном находятся в
/usr/lib/systemd/system
Содержимое, возможно, также в
/etc/systemd/system
Содержание. Найдите файл конфигурации, затем откройте его с помощью текстового редактора.
systemctl
cat
Команда может быть использована для просмотра конфигурационного файла, ниже приведено.
sshd.service
Файл служит примером, его задача - запустить SSH-сервер, чтобы другие пользователи могли входить через SSH.
xxxxxxxxxx
$ systemctl cat sshd.service
[Unit]
Description=OpenSSH server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.service
Wants=sshd-keygen.service
[Service]
EnvironmentFile=/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
Type=simple
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
Можно увидеть, что конфигурационный файл разделен на несколько блоков, каждый из которых содержит несколько пар ключ-значение.
Ниже последовательно объясняется содержание каждого блока.
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
Как определить блок для запуска текущей службы.
Многое программное обеспечение имеет свои файлы параметров окружения, которые можно использовать для
EnvironmentFile
Чтение полей.
EnvironmentFile
Поле: Укажите файл параметров окружения для текущей службы. Внутри этого файлаkey=value
Парные ключи, можно использовать$key
в форме, получаемой в текущем конфигурационном файле.
В приведенном примере файл переменных окружения для sshd - это
/etc/sysconfig/sshd
Самое важное поле в конфигурационном файле — это
ExecStart
。
ExecStart
Поле: Определяет команду, выполняемую при запуске процесса.
В приведённом выше примере, запуск.
sshd
исполняемая команда это
/usr/sbin/sshd -D
$OPTIONS
в которых переменные
$OPTIONS
просто из
EnvironmentFile
Параметры среды, указанные в поле. Существуют и другие поля с аналогичным воздействием.
ExecReload
Поле: Команда, выполняемая при перезапуске службы
ExecStop
Поле: Команда, выполняемая при остановке службы
ExecStartPre
Поле: Команда, выполняемая перед запуском службы
ExecStartPost
Поле: Команда, выполняемая после запуска службы
ExecStopPost
Поле: Команда, выполняемая после остановки службы
Пожалуйста, посмотрите на следующий пример.
xxxxxxxxxx
[Service]
ExecStart=/bin/echo execstart1
ExecStart=
ExecStart=/bin/echo execstart2
ExecStartPost=/bin/echo post1
ExecStartPost=/bin/echo post2
В этом конфигурационном файле, на второй строке
ExecStart
Установить в значение пусто, это равно отмене настроек первой строки, результат выполнения следующий.
xxxxxxxxxx
execstart2
post1
post2
Перед всеми настройками запуска можно добавить дефис.
-
),表示"抑制错误",即发生错误的时候,不影响其他命令的执行。比如,
EnvironmentFile=-/etc/sysconfig/sshd
(Обратите внимание на дефис после знака равенства), это означает, что даже если.
/etc/sysconfig/sshd
Файл не существует и не выдаст ошибку.
Type
Определение поля типа запуска. Возможные значения для него следующие.
простой (значение по умолчанию):
ExecStart
Процесс запуска поля является главным процессом.forking:
ExecStart
Поле будет заполненоfork()
Запуск в таком режиме приведет к тому, что родительский процесс завершится, а дочерний процесс станет основным процессом.аналогично
simple
Но выполняется только один раз, Systemd будет ждать его завершения, прежде чем запустить другие службы.dbus: аналогично
simple
но будет запущен после получения сигнала D-Busуведомить: похоже на
simple
После завершения загрузки будет отправлен сигнал уведомления, после чего Systemd запустит другие службы.похожий на
simple
Однако этот сервис будет запущен только после завершения других задач. Одним из случаев использования является то, чтобы вывод этого сервиса не смешивался с выводами других сервисов.
xxxxxxxxxx
[Unit]
Description=Switch-off Touchpad
[Service]
Type=oneshot
ExecStart=/usr/bin/touchpad-off
[Install]
WantedBy=multi-user.target
В конфигурационном файле выше тип запуска установлен на
oneshot
Это означает, что эта служба должна запускаться только один раз и не требует длительного выполнения. Если она будет закрыта, и в будущем вы захотите ее снова открыть, измените файл конфигурации следующим образом.
xxxxxxxxxx
[Unit]
Description=Switch-off Touchpad
[Service]
Type=oneshot
ExecStart=/usr/bin/touchpad-off start
ExecStop=/usr/bin/touchpad-off stop
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
в приведенном выше конфигурационном файле,
RemainAfterExit
Поле установлено как
yes
это означает, что после выхода процесса служба продолжает выполняться. В таком случае, как только будет использовано
systemctl
stop
Приказ остановить службу.
ExecStop
Указанная команда будет выполнена, что позволит снова включить сенсорную панель.
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 есть целевой запуск по умолчанию.
xxxxxxxxxx
$ systemctl get-default
multi-user.target
Результат выше показывает, что целевой запуск по умолчанию — это
multi-user.target
Все службы в этой группе будут запускаться при загрузке. Вот почему.
systemctl
enable
Причина, по которой команды могут настраивать автозагрузку, заключается в том, что при использовании Target,
systemctl
list-dependencies
команды и
systemctl isolate
Команды тоже очень полезны.
xxxxxxxxxx
# Просмотр всех служб, включенных в multi-user.target
$ systemctl list-dependencies multi-user.target
# Переключиться на другую цель
# shutdown.target — это состояние выключения.
$ sudo systemctl isolate shutdown.target
В общем, обычно используются два основных Target: один из них это
multi-user.target
, указывающий на состояние командной строки для нескольких пользователей; другой - это
graphical.target
это обозначает состояние графического пользователя, оно зависит от
multi-user.target
Официальный документ содержит очень четкое изображение.
Целевая зависимость графа
。
У Target также есть собственный конфигурационный файл.
xxxxxxxxxx
$ systemctl cat multi-user.target
[Unit]
Description=Multi-User System
Documentation=man:systemd.special(7)
Requires=basic.target
Conflicts=rescue.service rescue.target
After=basic.target rescue.service rescue.target
AllowIsolate=yes
Обратите внимание, что в конфигурационном файле 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
。
После изменения конфигурационного файла необходимо перезагрузить конфигурационный файл, а затем перезапустить соответствующие службы.
x
# Перезагрузить конфигурационный файл
$ sudo systemctl daemon-reload
# Перезапуск связанных служб
$ sudo systemctl restart foobar
(Конец)
Авторское заявление: Свободное воспроизведение - некоммерческое - без производных - с указанием авторства ( Лицензия Creative Commons 3.0 )
Дата публикации: 8 марта 2016 года
Вы недавно использовали: