[systemd-devel] systemd | Requires statement with an instantiated service
Leon Fauster
leonfauster at googlemail.com
Thu Sep 2 12:10:02 UTC 2021
On 02.09.21 08:00, Andrei Borzenkov wrote:
> On 02.09.2021 01:19, Leon Fauster wrote:
>> Example:
>>
>> a at .service
>> b.service
>>
>> a at .service is started as a at host1.service and b.service must be started
>> after a at host1.service but the unit will be differently parameterized
>> (depended of the region). So I want to generalize the requires statement.
>
> If you need to manually instantiate a at .service, you can just as well
> manually add necessary Requires at the same time. E.g.
>
> a at .service:
>
> [Install]
> RequiredBy=b.service
>
> systemctl enable a at your-region.service
>
Indeed that was also what I tried but it seems that my problem is
that b.service needs a device from a.service, and that seems to need
some time to come up. Systemd is here to "fast". Just for the sake
of progress I implemented a workaround,
b.service.d/dep.conf
[Service]
ExecStartPre=/bin/sleep 3
a different workaround would be to let b.service fail and with the use
of Restart=on-failure bring it later up (RestartSec=5) but honestly that
seems to be more dirty then the above workaround.
I had also a device.unit in mind as trigger but I can not say in advance
what device will be used (dev0, dev1, dev2).
>>
>> My dropin file in ./b.service.d/dep.conf looks like
>>
>> [Unit]
>> Requires="a@*.service"
>>
>> This just produces following error:
>> 'Failed to add dependency on "a@*.service", ignoring: Invalid argument'
>>
>> I use also a Before=b.service statement for a at .service but that is not
>> enough.
>>
>
> Why?
a at .service is started before b.service but in the same second, its to
close for b.service to be successful.
--
Leon
More information about the systemd-devel
mailing list