LINUX.ORG.RU

Настроить зависимость между юнитами «разной природы»

 


0

1

Один из них располагается в multi-user.target, а другой – в user@.target (в отдельном инстансе systemd). У второго в секции Unit должны быть такие опции:

Requires=network.target
Wants=network-online.target
After=network-online.target network.target

Собственно, сеть поднимается в «основном» systemd – и network.target активируется тоже в нём же; никаким образом настроить односторонню зависимость «пользовательского» юнита от «системных» нельзя (?) . Как быть? Пинговаться в user@.target?

★★

Последнее исправление: kalterfive (всего исправлений: 2)

Насколько понимаю, сейчас это невозможно.

На данный момент в пользовательских инстансах systemd появляются только .device- и .mount-юниты, эквивалентные общесистемным, но это происходит лишь пост-фактум (т. е., например, в пользовательском инстансе нельзя построить зависимость от точки монтирования, поскольку соответствующий юнит как таковой появится только после того, как монтирование произойдёт).

Конкретно в твоём случае можно скопипастить сам wait-online юнит и запустить его от пользователя (т. к. там никаких привилегированных операций, вроде бы, нет).

Глобально можно написать шаблонный юнит вида wait-system-unit@.service, который при запуске будет слушать шину и ждать активации юнита, имя которого передано ему параметром, после чего делать sd_notify о собственной готовности.

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

В лучшем случае, конечно, в сам systemd добавляется новый тип юнита а-ля .system-unit, делающий всё вышеуказанное. Таким образом не придётся создавать по процессу на каждый такой юнит.

«Но это нужно брать и руками работать, а у нас времени нет.» (c)

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.