1.6 KiB
1.6 KiB
Systemd Timers
Gen Z's crontab
Generally there are 3 pieces to a timer
- The script being run
- The systemd service defining which script to run
- The systemd timer triggering the service
Tools
systemd-analyze calendar
can be very handy at verifying timestamps
systemd-analyze calendar *-*-* *:10,20:10
Time is in the format:
DayOfWeek Year-Month-Day Hour:Minute:Second
To find suitable targets for things like Wants
and After
, see
systemd.special(7)
. If you want to check the current status of your targets,
use:
systemctl list-units --type target --state active
systemctl status network-online.target
Placing files
Scripts should be put in /usr/local/bin
if they can be run by anyone or
/usr/local/sbin
if they should only be run by root
Define a xxx.service
file in /etc/systemd/system
. Set the timer as one of
its Wants
. network.target
may be more appropriate in some cases. Do not add
an [Install]
section, as your timer already handles that
[Unit]
Description = Sends current ip address to uni servers
Wants = broadcast_ip.timer
Wants = network.target
After = network.target
[Service]
Type = oneshot
ExecStart = /usr/local/bin/broadcast_ip.sh
Now you'll need a timer file. It's easiest to make it have the same name as the
service file and put it in the same /etc/systemd/system
[Unit]
Description = Sends current ip address to uni servers
Requires = broadcast_ip.service
[Timer]
Unit = broadcast_ip.service
OnCalendar = *-*-* *:15,45:00
[Install]
WantedBy = timers.target