On Tue, May 21, 2024 at 11:47 PM Robert Landers <landers.rob...@gmail.com> 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