5

Currently, I have this systemd timer (my.timer):

[Unit]
Description=My Timer

[Timer]
OnActiveSec=30 
Unit=my-subsequent.service

[Install]
WantedBy=multi-user.target

The timer is set to activate upon boot due to: systemctl enable my.timer and systemctl start my.timer.

Upon activation, the timer waits for 30 seconds, then it starts the service my-subsequent.service.

However, instead of having the timer activate upon boot, I would like it to wait for another service (my-preceding.service) to activate upon boot.

So that the chain is: boot > my-preceding.service > my.timer > my-subsequent.service.

How can I accomplish this?


Edit:

I tried to find if I can use After= and Requires= in timers, but didn't find anything. This does however seem to work at first glance. Is it an acceptable solution?

[Unit]
Description=My Timer
After=my-preceding.service
Requires=my-preceding.service

[Timer]
OnActiveSec=30 
Unit=my-subsequent.service

[Install]
WantedBy=multi-user.target

1 Answer 1

3

Yes, using After=, and Requires= is the correct approach for ordering services. You may also want to note that if a service specified in Requires fails, so will your service. From the manpage:

Often, it is a better choice to use Wants= instead of Requires= in order to 
achieve a system that is more robust when dealing with failing services.
2
  • You wrote services, but do you also include timers in this?
    – P A N
    Aug 14, 2020 at 17:57
  • 1
    Yes, unit configurations for both timers, and services are the same in systemd i.e. the [Unit] section is generic to both types of config files. This is also the same with the [Install] section. You can check this out for more information: freedesktop.org/software/systemd/man/systemd.timer.html
    – hakskel
    Aug 17, 2020 at 14:18

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .