2.5 KiB
How to Set Up a systemd Timer
This guide provides a quick walkthrough for creating, enabling, and managing systemd timer units to schedule tasks.
1. Create a Service Unit
First, create a .service file that defines the job you want to run. This file will be placed in /etc/systemd/system/.
Example: /etc/systemd/system/mytask.service
[Unit]
Description=A description for your task
[Service]
Type=oneshot
ExecStart=/usr/local/bin/mytask.sh
Type=oneshot: Indicates that this service is a short-lived task.ExecStart: The command or script to be executed.
2. Create a Timer Unit
Next, create a corresponding .timer file. This file defines the schedule for when the service should run.
Example: /etc/systemd/system/mytask.timer
[Unit]
Description=Run mytask.service every day at 3 AM
[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true
[Install]
WantedBy=timers.target
OnCalendar: Defines a calendar-based schedule. The format isDayOfWeek Year-Month-Day Hour:Minute:Second. An asterisk (*) matches any value.Persistent=true: If the system was down when the timer should have run, the job will execute as soon as the system boots up.
3. Enable and Start the Timer
After creating the files, reload the systemd daemon and start the timer:
# Reload systemd to recognize the new files
sudo systemctl daemon-reload
# Enable the timer to start on boot
sudo systemctl enable mytask.timer
# Start the timer immediately
sudo systemctl start mytask.timer
You can do this in one command with --now:
sudo systemctl enable --now mytask.timer
4. List Existing Timers
To see all active timers and when they are scheduled to run next, use the list-timers command:
systemctl list-timers
Output Example:
NEXT LEFT LAST PASSED UNIT ACTIVATES
Wed 2025-08-27 03:00:00 CEST 12h left Tue 2025-08-26 03:00:00 CEST 9h ago mytask.timer mytask.service
NEXT: The next time the timer will trigger.LEFT: Time remaining until the next trigger.LAST: The last time the timer was triggered.
To include inactive timers, add the --all flag:
systemctl list-timers --all
5. Check Status and Logs
To check the status of a specific timer or service:
systemctl status mytask.timer
systemctl status mytask.service
To view the logs generated by your service:
journalctl -u mytask.service
To follow the logs in real-time, add the -f flag.