These are the notes of a training course on systemd I gave as part of my work with Truelite.
.timer
units
Configure activation of other units (usually a .service
unit) at some given time.
The functionality is similar to cron, with more features and a finer time
granularity. For example, in Debian Stretch apt has a timer for running apt
update
which runs at a random time to distribute load on servers:
# /lib/systemd/system/apt-daily.timer [Unit] Description=Daily apt download activities After=network-online.target Wants=network-online.target [Timer] OnCalendar=*-*-* 6,18:00 RandomizedDelaySec=12h Persistent=true [Install] WantedBy=timers.target
The corresponding apt-daily.service
file then only runs when the system is on
mains power, to avoid unexpected batter drains for systems like laptops:
# /lib/systemd/system/apt-daily.service [Unit] Description=Daily apt download activities Documentation=man:apt(8) ConditionACPower=true [Service] Type=oneshot ExecStart=/usr/lib/apt/apt.systemd.daily update
Note that if you want to schedule tasks with an accuracy under a minute
(for example to play a beep every 10 seconds when running on battery), you need
to also configure AccuracySec=
for the timer to a delay shorter than the
default 1 minute
.
This is how to make your computer beep when on battery:
# /etc/systemd/system/beep-on-battery.timer [Unit] Description=Beeps every 10 seconds [Install] WantedBy=timers.target [Timer] AccuracySec=1s OnUnitActiveSec=10s
# /etc/systemd/system/beep-on-battery.service [Unit] Description=Beeps when on battery ConditionACPower=false [Service] Type=oneshot ExecStart=/usr/bin/aplay /tmp/beep.wav
See:
man systemd.timer
man systemd.time
- a programmable alarm clock using systemd
systemctl --all -t timer
for examples