Оставляют ли подпроцессы открытыми каналы?

Существует разница между Before/ Afterи Wants/ Requires/Requisite:первая группа указывает синхронизацию пусков блока, а последняя группа указывает зависимости . Часто разница между ними невелика, но иногда она важна. Чтение документации полезно для получения более подробной информации, так как я пропустил то, что вы не так часто видите.

В качестве примера предположим, что у вас есть несколько сервисов с зависимостями:

а.сервис

[Service]
Type=oneshot
ExecStart=/bin/sh -c 'sleep 5;/bin/false'
RemainAfterExit=yes

б.сервис

[Unit]
After=a.service

[Service]
Type=oneshot
ExecStart=/bin/echo B
RemainAfterExit=yes

ц.сервис

[Unit]
Requires=a.service

[Service]
Type=oneshot
ExecStart=/bin/echo C
RemainAfterExit=yes

д.сервис

[Unit]
After=a.service
Requires=a.service

[Service]
Type=oneshot
ExecStart=/bin/echo D
RemainAfterExit=yes

Что загружается (и в каком порядке )резко меняется в зависимости от того, что вы запускаете:

  • a:a
  • b:b
  • c(или a+c):aи cодновременно(cпродолжает работать, даже если aне работает)
  • d(или a+d):a-> c(, если aзапущен успешно)
  • a+b:a->b(независимо от того, запущен ли a)

К чему вся эта сложность? Это для ускорения загрузки юнитов. Если сервисы не имеют Beforeили After, ссылающихся друг на друга, то они могут быть запущены в одно и то же время (, предполагая, что они не нужны другим устройствам!)

Куда берутся файлы .target? Они объединяют единицы в функциональные группы,таким образом, когда система запускается (или останавливается и т. д. ), устройства, необходимые для этой фазы, могут запускаться вместе, и устройства могут указать, что они хотят дождаться запуска другой фазы. Например, модуль может включать After=network.target, чтобы убедиться, что сеть имеет возможность инициализироваться перед запуском, даже если он установлен как часть multi-user.target.

Если вы хотите просмотреть порядок, в котором юниты зависят друг от друга, вы можете запустить systemctl list-dependencies(, он не скажет вам порядок, в котором они загружались, поскольку он несколько случайный за пределами Before/ After. настройки.)

1
13.11.2019, 11:25
0 ответов

Теги

Похожие вопросы