RHEL7: How to use Systemd timers.

Share this link

Systemd Timer Presentation

Systemd allows you to define timers. This feature is meant to work with services but can be used for anything else. It is a powerful alternative to cron.

Service Creation

Let’s assume that you want to launch a backup script of your apache website every day.

Create the /var/www/backup directory:

# mkdir /var/www/backup

Create the /var/www/backup/backup.sh file and paste the following lines:

#!/bin/bash
DAYMONTH=`date "+%d"`
/bin/tar --selinux -czvf /var/www/backup/backup-$DAYMONTH.tgz /var/www/html &>/dev/null

Make it executable:

# chmod +x /var/www/backup/backup.sh

Create the /usr/lib/systemd/system/backup.service file and paste the following lines:

[Unit]
Description=Backup of my apache website

[Service]
Type=simple
ExecStart=/var/www/backup/backup.sh

[Install]
WantedBy=multi-user.target

Timer Creation

Create the /usr/lib/systemd/system/backup.timer file and paste the following lines:

[Unit]
Description=Execute backup every day at midnight

[Timer]
OnCalendar=*-*-* 00:00:00
Unit=backup.service

[Install]
WantedBy=multi-user.target

Some other options like OnCalendar are available:

  • OnActiveSec defines a timer relative to the moment the timer itself is activated.
  • OnBootSec defines a timer relative to when the machine was booted up.
  • OnStartupSec defines a timer relative to when systemd was started.
  • OnUnitActiveSec defines a timer relative to when the unit the timer is activating was last activated.
  • OnUnitInactiveSec defines a timer relative to when the unit the timer is activating was last deactivated.

The RHEL 7.2 release brings three new options:

  • AccuracySec defines the time window within the timer is scheduled to elapse (1min by default).
  • Persistent, a boolean, if set to true, the time when the service unit was last triggered is stored on disk. This information is then used on next reboot to possibly execute overdue timer events, that could not take place because the system was powered off.
  • WakeSystem, a boolean, if set to true, timers configured this way will cause the system to resume from system suspend.

With RHEL 7.3 comes the RandomizedDelaySec option, which schedules an event to occur later by a random number of seconds to spread workload over a longer time period and avoid several events executing at the same time (BZ#1305279).

Date Syntax

Each of the previous options uses the date syntax below:

Minimal form                   Normalized form
Sat,Thu,Mon-Wed,Sat-Sun    ==> Mon-Thu,Sat,Sun *-*-* 00:00:00
Mon,Sun 12-*-* 2,1:23      ==> Mon,Sun 2012-*-* 01,02:23:00
Wed *-1                    ==> Wed *-*-01 00:00:00
Wed-Wed,Wed *-1            ==> Wed *-*-01 00:00:00
Wed, 17:48                 ==> Wed *-*-* 17:48:00
Wed-Sat,Tue 12-10-15 1:2:3 ==> Tue-Sat 2012-10-15 01:02:03
*-*-7 0:0:0                ==> *-*-07 00:00:00
10-15                      ==> *-10-15 00:00:00
monday *-12-* 17:00        ==> Mon *-12-* 17:00:00
Mon,Fri *-*-3,1,2 *:30:45  ==> Mon,Fri *-*-01,02,03 *:30:45
12,14,13,12:20,10,30       ==> *-*-* 12,13,14:10,20,30:00
mon,fri *-1/2-1,3 *:30:45  ==> Mon,Fri *-01/2-01,03 *:30:45
03-05 08:05:40             ==> *-03-05 08:05:40
08:05:40                   ==> *-*-* 08:05:40
05:40                      ==> *-*-* 05:40:00
Sat,Sun 12-05 08:05:40     ==> Sat,Sun *-12-05 08:05:40
Sat,Sun 08:05:40           ==> Sat,Sun *-*-* 08:05:40
2003-03-05 05:40           ==> 2003-03-05 05:40:00
2003-03-05                 ==> 2003-03-05 00:00:00
03-05                      ==> *-03-05 00:00:00
hourly                     ==> *-*-* *:00:00
daily                      ==> *-*-* 00:00:00
monthly                    ==> *-*-01 00:00:00
weekly                     ==> Mon *-*-* 00:00:00
*:20/15                    ==> *-*-* *:20/15:00

Note: *:20/15 means *:20:00, *:35:00, *:50:00, restarting the next hour at *:20:00.

Execution

Activate at boot and start the backup timer to get your website backed up every day:

# systemctl enable backup.timer
# systemctl start backup.timer

To check if the backup timer is enabled, type:

# systemctl is-enabled backup.timer
enabled

To check if the backup timer is running, type:

# systemctl is-active backup.timer
active

If you want to run the backup script at any time, type:

# systemctl start backup

If you decide to change the backup frequency, after modifying the OnCalendar value, don’t forget to type:

# systemctl daemon-reload

Sources: Borrowed from a very good article by Jason The Graham, with the help of the systemd.timer and systemd.time man pages.

With the RHEL 7.2 release, a new command is available to get some additional information about timers.
To get some information about our backup timer, type:

# systemctl list-timers backup*
NEXT                         LEFT       LAST PASSED UNIT         ACTIVATES
Thu 2016-01-14 00:00:00 CET  44min left n/a  n/a    backup.timer backup.service

1 timers listed.
Pass --all to see loaded but inactive timers, too.

Test yourself!

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading...

Leave a Reply

Be the First to Comment!

Notify of
wpDiscuz

RHCSA7: Task of the day

Allowed time: 5 minutes.
Create two users "tom" and "engine". "tom" has the UID/GID 3000 and "engine" the UID/GID 4000. "engine" doesn't have an interactive shell.

RHCE7: Task of the day

Allowed time: 5 minutes.
Set up time synchronization with default configuration.

Poll for favorite RHEL 7 book

What is your favorite RHEL 7 book to prepare RHCSA & RHCE exams?

View Results

Loading ... Loading ...

Poll for most difficult RHCSA 7 topic

What do you think is the most difficult RHCSA 7 topic?

View Results

Loading ... Loading ...

Poll for most difficult RHCE 7 topic

What do you think is the most difficult RHCE 7 topic?

View Results

Loading ... Loading ...