Scheduling tasks with systemd timers
Flatcar Container Linux uses systemd timers (cron
replacement) to schedule tasks. Here we will show you how you can schedule a periodic job.
Let’s create an alternative for this crontab
job:
*/10 * * * * /usr/bin/date >> /tmp/date
Timers work directly with services' units. So we have to create /etc/systemd/system/date.service
first:
[Unit]
Description=Prints date into /tmp/date file
[Service]
Type=oneshot
ExecStart=/usr/bin/sh -c '/usr/bin/date >> /tmp/date'
Then we have to create timer unit with the same name but with *.timer
suffix /etc/systemd/system/date.timer
:
[Unit]
Description=Run date.service every 10 minutes
[Timer]
OnCalendar=*:0/10
This config will run date.service
every 10 minutes. You can also list all timers enabled in your system using systemctl list-timers
command or systemctl list-timers --all
to list all timers. Run systemctl start date.timer
to enable timer.
You can also create timer with different name, i.e. task.timer
. In this case you have specify service unit name:
Unit=date.service
Butane Config
Here you’ll find an example Butane Config demonstrating how to install systemd timers:
variant: flatcar
version: 1.0.0
systemd:
units:
- name: date.service
contents: |
[Unit]
Description=Prints date into /tmp/date file
[Service]
Type=oneshot
ExecStart=/usr/bin/sh -c '/usr/bin/date >> /tmp/date'
- name: date.timer
enabled: true
contents: |
[Unit]
Description=Run date.service every 10 minutes
[Timer]
OnCalendar=*:0/10
[Install]
WantedBy=multi-user.target
Further reading
If you’re interested in more general systemd timers feature, check out the full documentation .