Scheduling Tasks with Systemd Timers in Linux
Scheduling tasks in Linux can be a lifesaver when you want things done automatically. For many, cron is the go-to tool for scheduling, but systemd offers a newer alternative with more flexibility and control: systemd timers. In this guide, you'll learn what systemd timers are, how they work, and how to create and manage them.
What are Systemd Timers?
In Linux, systemd timers provide a way to schedule tasks similar to cron but with more advanced features and integration into the systemd ecosystem. While cron schedules tasks purely on time intervals, systemd timers allow additional conditions like dependencies, service integration, and event-based triggers. This makes systemd timers a powerful tool for managing system tasks efficiently.
The Components of Systemd Timers
A systemd timer consists of two main parts: a timer unit and a service unit.
Timer Unit: This file defines when the task should run. It specifies the timing parameters, such as
OnCalendarfor calendar-based schedules andOnBootSecfor intervals after boot time.Service Unit: This file defines the actual task that will be executed. It’s where you specify what the timer is triggering, whether it’s running a script, restarting a service, or performing a cleanup operation.
These two units work together, with the timer determining the schedule and the service handling the task execution.
Why Use Systemd Timers Over Cron?
While cron is great for simple, time-based scheduling, systemd timers offer additional features that make them ideal for certain tasks:
Better Integration with Systemd:
systemd timerscan interact with othersystemdunits, making it easier to coordinate tasks with service dependencies.Event-Based Scheduling: In addition to time-based scheduling,
systemd timerssupport event-based scheduling with directives likeOnBootSec, which lets you run tasks a specific time after boot, orOnUnitActiveSec, which schedules tasks relative to other units.Persistent Scheduling: If a task is missed (for example, due to system downtime),
systemd timerscan be set to catch up automatically.
The following table shows the differences between systemd timers and cronjobs:
Creating a Systemd Timer
To demonstrate how systemd timers work, let’s create a simple example where a timer logs the current date and time to a file every 10 minutes. This is a straightforward way to set up a repeating task and see systemd timers in action.
Step 1: Create the Service Unit
The service unit defines the actual task. In this example, we’ll write the current date and time to a log file (/tmp/date).
Open a new service file in your preferred editor:
$ sudo nano /etc/systemd/system/date.serviceAdd the following content to specify the task:
[Unit]
Description=Log current date to /tmp/date
[Service]
Type=oneshot
ExecStart=/bin/sh -c 'date >> /tmp/date'
Description: A brief description of what the service does.
Type=oneshot: Indicates that the task should run once each time it’s triggered.ExecStart: The command to execute. Here, we’re appending the current date to/tmp/datewith each run.
Step 2: Create the Timer Unit
Now, we need a timer unit that schedules when to run date.service.
Create a new timer file:
$ sudo nano /etc/systemd/system/date.timerAdd the following content to define the timing parameters:
[Unit]
Description=Run date.service every 10 minutes
[Timer]
OnCalendar=*:0/10
Persistent=true
[Install]
WantedBy=timers.target
Keep reading with a 7-day free trial
Subscribe to sysxplore to keep reading this post and get 7 days of free access to the full post archives.


