On Mon, Jul 16, 2018, 21:33 John Ioannidis <systemd-devel at tla.org> wrote: > Assume I have a one-shot service, *phase1.service*, which runs for a > while and then terminates. I want to have a *phase2.service* start up > when phase1 terminates. > > I cannot change anything in phase1.service's systemd files or code or > anything, or I would not be asking this question! > Sure you can â?? systemd has several ways of extending a unit file without touching the (read-only) original, such as "<unit>.d/*.conf" drop-ins or "<unit>.wants/" symlinks. And in the end those are the only direct answer to your question. If phase1.service needs to trigger phase2.service, the former must have a dependency (Requires= or Wants=) on the latter. Anything else would be either a workaround or a hack. > A dirty workaround is to just have phase2 start before phase1 and run this > script (wait until phase1 starts up, then wait until it finishes, then do > its thing): > Type=oneshot services are "starting" the entire time the main process is running, moving to active or inactive only when the process *exits*. As far as I know, they don't have separate "starts up" and "finishes" phases, so your description of phase1.service's behavior contradicts itself. Please clarify this. > while ! systemctl status phase1.service > /dev/null > do > sleep 10 # still waiting for phase1 to start up > done > while systemctl status phase1.service > /dev/null > do > sleep 10 # still waiting for phase1 to finish > done > # now do the phase2 work > > There has to be a better way of doing this, but I can't figure it out. > Google/Bing/SO searches return lots of other workarounds, mostly for user > sessions, which is not the case here. > If phase1.service is truly Type=oneshot, then extending it as follows should work fine. # /etc/systemd/system/phase1.service.d/depend-on-phase2.conf [Unit] Wants=phase2.service Before=phase2.service If it's not Type=oneshot... sure sounds like it was meant to be. Unfortunately for all other types (which have a distinct 'stopping' stage) there's no straightforward answer, although there still are plenty of better options than "while(sleep 10)". -- Mantas MikulÄ?nas -------------- next part -------------- An HTML attachment was scrubbed... URL: <https://lists.freedesktop.org/archives/systemd-devel/attachments/20180716/a7a45170/attachment.html>