Systemd/timers: Difference between revisions
Add section about systemd.services.<name>.startAt |
Added `RemainAfterExit = true;` to the example since this is probably what people want. |
||
(One intermediate revision by one other user not shown) | |||
Line 12: | Line 12: | ||
The following example timer runs a systemd unit every 5 minutes which invokes a bash script. | The following example timer runs a systemd unit every 5 minutes which invokes a bash script. | ||
</translate> | </translate> | ||
< | <syntaxhighlight lang="nix"> | ||
systemd.timers."hello-world" = { | systemd.timers."hello-world" = { | ||
wantedBy = [ "timers.target" ]; | wantedBy = [ "timers.target" ]; | ||
Line 18: | Line 18: | ||
OnBootSec = "5m"; | OnBootSec = "5m"; | ||
OnUnitActiveSec = "5m"; | OnUnitActiveSec = "5m"; | ||
# Alternatively, if you prefer to specify an exact timestamp | |||
# like one does in cron, you can use the `OnCalendar` option | |||
# to specify a calendar event expression. | |||
# Run every Monday at 10:00 AM in the Asia/Kolkata timezone. | |||
#OnCalendar = "Mon *-*-* 10:00:00 Asia/Kolkata"; | |||
Unit = "hello-world.service"; | Unit = "hello-world.service"; | ||
}; | }; | ||
Line 30: | Line 35: | ||
Type = "oneshot"; | Type = "oneshot"; | ||
User = "root"; | User = "root"; | ||
RemainAfterExit = true; # Prevents the service from automatically starting on rebuild. See https://discourse.nixos.org/t/how-to-prevent-custom-systemd-service-from-restarting-on-nixos-rebuild-switch/43431 | |||
}; | }; | ||
}; | }; | ||
</ | </syntaxhighlight> | ||
Line 46: | Line 52: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
in your terminal. | in your terminal. | ||
==== Verifying your timestamp for systemd.time ==== | |||
If you do not understand the format that [https://www.freedesktop.org/software/systemd/man/latest/systemd.time.html systemd.time] expects, you can use the <code>systemd-analyze</code>'s <code>calendar</code> sub-command to understand the next ''N'' times when the timer will get triggered. Following is an example:<syntaxhighlight lang="shell-session"> | |||
$ systemd-analyze calendar --iterations=5 "10:00:00" | |||
Original form: 10:00:00 | |||
Normalized form: *-*-* 10:00:00 | |||
Next elapse: Sat 2024-12-07 10:00:00 IST | |||
(in UTC): Sat 2024-12-07 04:30:00 UTC | |||
From now: 33min left | |||
Iteration #2: Sun 2024-12-08 10:00:00 IST | |||
(in UTC): Sun 2024-12-08 04:30:00 UTC | |||
From now: 24h left | |||
Iteration #3: Mon 2024-12-09 10:00:00 IST | |||
(in UTC): Mon 2024-12-09 04:30:00 UTC | |||
From now: 2 days left | |||
Iteration #4: Tue 2024-12-10 10:00:00 IST | |||
(in UTC): Tue 2024-12-10 04:30:00 UTC | |||
From now: 3 days left | |||
Iteration #5: Wed 2024-12-11 10:00:00 IST | |||
(in UTC): Wed 2024-12-11 04:30:00 UTC | |||
From now: 4 days left | |||
</syntaxhighlight> | |||
====Using the <code>systemd.services.<name>.startAt</code> shorthand==== | ====Using the <code>systemd.services.<name>.startAt</code> shorthand==== |