LINUX.ORG.RU
ФорумAdmin

Будет ли стартировать systemd сервис X, если он зависит как After=Y где Y disabled или не существует

 


0

1

У меня есть systemd сервис X, у которого в unit конфигурации есть строка:

[Unit]
....
After=YYYY.service
.....

В конфигурации сервиса X, YYYY нигде в другом месте не фигурирует (в частности, он НЕ включен в Wants= и/или Requires= для X).

Вопросы такие (искал в документации, но не нашел четкого ответа):

  • Будет ли сервис X стартовать, если сервис YYYY disabled? (я хочу, чтобы X стартовал)
  • Будет ли сервис X стартовать, если сервис YYYY masked? (я хочу, чтобы X стартовал)
  • Будет ли сервис X стартовать, если сервис YYYY не существует? (я хочу, чтобы X стартовал)
  • Будет ли сервис X стартовать, если сервис YYYY попытался стартовать, но вылетел/крашнулся с ошибкой? (я хочу, чтобы X стартовал)

Короче, мне нужно чтобы сервис X всегда стартовал при отсутствия YYYY; и только когда сервис YYYY существует и стартовал (успешно или нет, без значения) то сервис X был запущен после YYYY.

After= — это зависимость порядка. Она ничего не делает, если второй юнит не является частью той же транзакции. Ответ на все четыре твоих вопроса — «да».

искал в документации, но не нашел четкого ответа

systemd.unit(5):

If unit foo.service contains the setting Before=bar.service and both units are being started, bar.service’s start-up is delayed until foo.service has finished starting up. After= is the inverse of Before=

(emphasis mine)

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 2)
Ответ на: комментарий от intelfx

Т.е. несуществование YYYY не отразится никак на запуск X? (не смотря на то, что X не может запуститься «after» чего-то несуществующего)?

В этом смысле, условие «After=YYYY.service» будет просто проигнорировано если YYYY не существует/замаскирован/disabled (при данных условий, т.е. если учесть что YYYY никак более не участвует в systemctl show X кроме в After=) - правильно?

manul91
() автор топика
Ответ на: комментарий от intelfx

If unit foo.service contains the setting Before=bar.service and >>both units are being started, bar.service’s start-up is >>delayed until foo.service has finished starting up. After= is the inverse of Before=

(emphasis mine)

Это объясняет что произойдет если оба сервиса запущены, но не объясняет что произойдет (или не произойдет) если сервис YYYY не запущен (не существует/не запустился/маскирован) (и других зависимостей X от YYYY нет)…

manul91
() автор топика
Ответ на: комментарий от manul91

если YYYY не существует/замаскирован/disabled

Это всё разные ситуации.

Если YYYY замаскирован или disabled, то он не является частью данной транзакции и After= игнорируется по определению (я привёл выше).

Если YYYY отсутствует, то тут качественно другая ситуация — но ответ такой же, т. к. ссылки на отсутствующие юниты в systemd не являются ошибкой.

intelfx ★★★★★
()
Ответ на: комментарий от manul91

Это объясняет что произойдет если оба сервиса запущены

Нет, ты неправильно читаешь документацию.

Надо читать так: «Если в одном юните написано Before= (или After=) И оба юнита запускаются одновременно, то произойдёт следующее: <…>».

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

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от intelfx

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

Спасибо!

manul91
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.