On Tue, May 21, 2024 at 11:47 PM Robert Landers <landers.robert@xxxxxxxxx> wrote:
Hello hello,
I'm encountering an issue with Systemd service dependencies that I
can't seem to resolve despite following the documentation. Either
there's a misunderstanding on my part or there's a potential bug.
1. I cannot modify a specific service (immutable.service) because it's
generated dynamically by a tool which I also cannot modify.
A service may consist of multiple config files – even if you cannot modify /etc/…/immutable.service itself, you can still extend it by creating /etc/…/immutable.service.d/foo.conf (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.
2. I need to create a service (after-reboot.service) that runs after
the network is completely up and running and before immutable.service.
3. I need to prevent immutable.service from starting if
after-reboot.service fails to start.
Use the "drop-in" mechanism to extend immutable.service with:
# /etc/systemd/system/immutable.service.d/special.conf
[Unit]
After=after-reboot.service
Requires=after-reboot.service
# or Requisite=, or AssertSomething=, or whatever suits
[Install]
WantedBy=multi-user.target
RequiredBy=immutable.service
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].)
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.
--
Mantas Mikulėnas