<div dir="ltr"><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, May 21, 2024 at 11:47 PM Robert Landers <<a href="mailto:landers.robert@gmail.com">landers.robert@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hello hello,<br>
<br>
I'm encountering an issue with Systemd service dependencies that I<br>
can't seem to resolve despite following the documentation. Either<br>
there's a misunderstanding on my part or there's a potential bug.<br>
<br>
1. I cannot modify a specific service (immutable.service) because it's<br>
generated dynamically by a tool which I also cannot modify.<br></blockquote><div><br></div><div>A service may consist of multiple config files – even if you cannot modify <span style="font-family:monospace">/etc/…/immutable.service</span> itself, you can still extend it by creating <span style="font-family:monospace">/etc/…/immutable.service.d/foo.conf</span> (e.g. using `systemctl edit immutable`) which lets you add any properties (or reset/remove many of them); and technically, you're already doing something like that using your WantedBy= and RequiredBy= settings – they're both implemented by extending the specified service with Wants/Requires without actually modifying its file.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
2. I need to create a service (after-reboot.service) that runs after<br>
the network is completely up and running and before immutable.service.<br>
3. I need to prevent immutable.service from starting if<br>
after-reboot.service fails to start.<br></blockquote><div><br></div><div>Use the "drop-in" mechanism to extend immutable.service with:</div><div><br></div><div style="margin-left:40px"><span style="font-family:monospace"># /etc/systemd/system/immutable.service.d/special.conf</span></div><div style="margin-left:40px"><span style="font-family:monospace">[Unit]</span></div><div style="margin-left:40px"><span style="font-family:monospace">After=after-reboot.service<br></span></div><div style="margin-left:40px"><span style="font-family:monospace">Requires=after-reboot.service</span></div><div style="margin-left:40px"><span style="font-family:monospace"># or Requisite=, or AssertSomething=, or whatever suits</span></div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
[Install]<br>
WantedBy=multi-user.target<br>
RequiredBy=immutable.service<br></blockquote><div><br></div><div>This should work, but all of [Install] is only re-applied when you `systemctl [re]enable after-reboot`, so make sure you have done that. (That's the reason it's under [Install] and not under [Unit].)</div><div><br></div><div>But since it's done to a .service, it doesn't imply any Before/After (if I remember correctly, the Wants-implies-After is .target-specific magic), so that may be what makes RequiredBy= insufficient. Use a .conf to add both Requires *and* After to immutable.service.<br></div><div><br clear="all"></div></div><br><span class="gmail_signature_prefix">-- </span><br><div dir="ltr" class="gmail_signature"><div dir="ltr">Mantas Mikulėnas</div></div></div>