DEV Community

Cover image for Configuring and Implementing Systemd Timers
Md. Rockibul Islam Khan
Md. Rockibul Islam Khan

Posted on • Updated on

Configuring and Implementing Systemd Timers

Introduction

We often find ourselves needing to automate repetitive procedures when working with Linux. Normally, we use CRON Jobs for this, however Linux comes with Systemd Timer, its own scheduler for the systemd services. Systemd Timers are modern equivalent of CRON Jobs. These are timer units that allow you to plan and manage when the scripts or services run. They are frequently chosen for managing system services since they offer greater granular control.

Explaining the systemd timers Format

Systemd Timers is a part of Systemd just like Systemd service. Systemd Timers use the OnCalendar for scheduling.

OnCalendar Format

*                   *-*-*                *:*:*
Day Of the week     Year-Month-Date      Hour:Minute:Second

Enter fullscreen mode Exit fullscreen mode

Some Examples for OnCalendar

Explaination                          Systemd timer
Every Minute                          *-*-* *:*:00
Every 15 minutes                      *:*:0,15,30,45
Every 30 minutes                      *:*:0,30
Every 1 hour                          *-*-* *:00:00
Every other hour                      *-*-* */2:00:00
Every 12 hour                         *-*-* */12:00:00
Between certain hours                 *-*-* 9-17:00:00
Daily                                 *-*-* 00:00:00
Every Night                           *-*-* 01:00:00
Every Night at 2am                    *-*-* 02:00:00
Every morning                         *-*-* 07:00:00
Every midnight                        *-*-* 00:00:00
Every sunday                          Sun *-*-* 00:00:00
Every friday at midnight              Fri *-*-* 00:00:00
Every weekday                         Mon...Fri *-*-* 00:00:00
Every weekend                         Sat,Sun *-*-* 00:00:00
Every 7 days                          * *-*-* 00:00:00
monthly                               * *-*-01 00:00:00
Every quarter                         * *-01,04,07,10-01 00:00:00
Every 6 months                        * *-01,07-01 00:00:00
Every year                            * *-01-01 00:00:00
Enter fullscreen mode Exit fullscreen mode

Setup the Timer Unit

For either system-wide or user-specific timers, first create a timer units file in the directory /etc/systemd/system or /etc/systemd/system.

For this article, I’ll be use a system-wide timer.

Step-1: Create system-wide timer unit file

$ sudo vim /etc/systemd/system/myjob.timer
Enter fullscreen mode Exit fullscreen mode

Change “myjob” to a task-specific timer name that is descriptive.

Step-2: Define the “.timer” file

For example, to trigger a task in every 5 minutes.

[Unit]
Description=My Timer

[Timer]
OnCalendar=*:*:0,15,30,45
Persistent=true
Unit=myjob.service

[Install]
WantedBy=multi-user.target
Enter fullscreen mode Exit fullscreen mode

Description: Describing the use case of this timer
OnCalender: this line defines when the timer should trigger. In this case, it’s set to run in every 5 minutes of the day.
Persistent=true: This ensures that if the system is offline during a scheduled run, the task will be executed when the system is next online.
Unit=call the “.service” file for the timer

Step-3: save and exit the “vim” editor.

Step-4: create system-wide service unit file

$ sudo vim /etc/systemd/system/myjob.service
Enter fullscreen mode Exit fullscreen mode

Step-5: Define the “.service” file

[Unit]
Description=My Job

[Service]
Type=simple
Restart=always
ExecStart=/usr/bin/python3 /<path-to-the-script>/myjob.py
Enter fullscreen mode Exit fullscreen mode

Replace the ExecStart value with the command or path to the script required to be executed for the task.
Step-6: save and exit the vim editor.
Start & Enable the Timer

To reload the Daemon:

$ sudo systemctl daemon-reload
Enter fullscreen mode Exit fullscreen mode

To enable the timer:

$ sudo systemctl enable myjob.timer
Enter fullscreen mode Exit fullscreen mode

To start the timer:

$ sudo systemctl start myjob.timer
Enter fullscreen mode Exit fullscreen mode

To check the timer status:

$ sudo systemctl status myjob.timer
Enter fullscreen mode Exit fullscreen mode

To restart the timer:

$ sudo systemctl restart myjob.timer
Enter fullscreen mode Exit fullscreen mode

To get the timer logs:

$ sudo journalctl -u myjob.service
Enter fullscreen mode Exit fullscreen mode

Conclusion

SystemD Timers contemporary flexibility can help us simplify our Linux system management duties. However, according on our requirements, we might have to schedule using the conventional CRON Job method.

Top comments (0)