Zero Signup ToolsFree browser tools

Developer Tools

systemd Timer Generator

Build a systemd .timer and matching .service in your browser. OnCalendar builder with validation, Persistent, randomized delay, and install commands. No signup.

systemd timer generator

Quick presets

Start from a common schedule

Unit and command

What runs, and what it is called

Used for both files: backup.timer and backup.service. No extension.

Shown by systemctl status and in the journal.

System timers run as root or a chosen user and start at boot. User timers run as you and need lingering enabled to run while you are logged out.

Use an absolute path. systemd does not run commands through a shell, so pipes and variables need an explicit /bin/sh -c wrapper.

Leave blank to run as root.

Schedule

When it fires

Resolved OnCalendar

*-*-* 03:00:00

Runs every day at 3:00.

Behavior

How the timer handles the real world

Adds a random wait of up to this long before each run. Set it on a fleet of machines so they do not all hit a server at once. Zero disables it.

The window systemd may shift the run within so it can batch wakeups and save power. The default is 1 minute. Lower it only when you need tighter timing.

Output

Your unit files

Timer unit

backup.timer

[Unit]
Description=Nightly backup

[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true

[Install]
WantedBy=timers.target

Service unit

backup.service

[Unit]
Description=Nightly backup

[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh

Install

Put it on the machine

# Save the unit files to /etc/systemd/system/
# /etc/systemd/system/backup.timer
# /etc/systemd/system/backup.service

# Reload systemd so it sees the new files
sudo systemctl daemon-reload

# Enable at boot and start now
sudo systemctl enable --now backup.timer

# Confirm the schedule and next run time
sudo systemctl list-timers backup.timer
systemd-analyze calendar '*-*-* 03:00:00'

Timer vs cron, in short

  • A timer cannot run a command on its own. It starts a matching service unit, which is why this tool emits both files.
  • Persistent=true runs a job that was missed while the machine was off, something a plain cron entry cannot do (anacron is the cron answer).
  • Logs go to the journal. Use journalctl -u backup.service to see output, and list-timers to see the next run.
  • RandomizedDelaySec spreads load across many machines, which is awkward to do with cron.

OnCalendar quick reference

  • *-*-* 03:00:00 every day at 03:00
  • Mon..Fri *-*-* 09:00 weekdays at 09:00
  • *:0/15 every 15 minutes
  • *-*-01 00:00:00 the first of every month
  • Sun *-*-* 04:30:00 Sundays at 04:30
  • Keywords like daily, weekly, and hourly also work and are expanded for you.

Verify any expression on the machine with systemd-analyze calendar '...', which prints the next elapses.

How to use

  1. Pick a preset like Nightly backup or Every 15 minutes to start, or fill in the unit base name, description, and the command to run (ExecStart).
  2. Choose a scope: System for a root or service-user job under /etc/systemd/system, or User for a job that runs as you under ~/.config/systemd/user.
  3. Set the schedule. Use Calendar for a clock-based time and pick a frequency, or switch to After boot (OnBootSec) or After last run (OnUnitActiveSec). Custom lets you write any OnCalendar expression.
  4. Read the resolved OnCalendar and its plain-English summary, and fix anything the validator flags. Turn on Persistent to catch up missed runs, and add a randomized delay if many machines share the schedule.
  5. Copy the .timer and .service files, save them to the path shown, then run the daemon-reload, enable, and list-timers commands. Everything runs in your browser.

About this tool

systemd Timer Generator produces the two files you actually need to schedule a job with systemd: a .timer unit and the .service unit it starts. This pairing is the whole point, and the part people miss. A timer cannot run a command by itself; it only activates another unit, so a timer on its own does nothing. The tool writes the service as Type=oneshot, which is what a scheduled task almost always is, and gives both files the same base name so the timer finds its service automatically. The centerpiece is an OnCalendar builder. systemd calendar syntax has the shape weekday year-month-day hour:minute:second, with wildcards, ranges written a..b, lists written a,b, and steps written /n, and it is powerful but unforgiving: a reversed range, a slash where a dash belongs, or an out-of-range value is only reported by systemd-analyze after you have already copied the file to a server. Here you pick a frequency such as daily, weekly, weekdays, monthly, or every fifteen minutes and fill in a time, or drop into a custom field and write any expression you like. Either way the tool validates every field against the documented grammar, flags the exact problem, normalizes the expression the way systemd would (filling in a default date of *-*-* and seconds of 00, expanding keywords like daily and hourly), and reads it back in plain English so you can confirm it fires when you expect. Beyond the schedule it covers the directives that make a timer behave well in production. Persistent runs a job that was missed while the machine was powered off, the thing a plain cron entry cannot do. RandomizedDelaySec adds a random wait before each run so a fleet of machines does not stampede a server at the same second. AccuracySec sets how far systemd may shift a run to batch wakeups and save power, defaulting to one minute and only written when you change it. OnBootSec schedules a job a set time after the machine boots, and OnUnitActiveSec repeats a job a set time after its previous run finished, both offered as plain value-and-unit fields. You choose system scope, where files live under /etc/systemd/system and the service can run as a named user, or user scope under ~/.config/systemd/user. When you point the timer at a unit that already exists rather than generating one, a Unit= line is added automatically if its name differs. The output includes copy-ready commands to save the files, run daemon-reload, enable the timer with enable --now so it survives reboots, and confirm the schedule with list-timers and systemd-analyze calendar. Everything is computed in your browser, so the unit name, command, paths, and schedule you enter are never uploaded, logged, or sent anywhere. It is the systemd counterpart to a cron expression generator, for people who have moved their scheduled jobs onto systemd and want the timer, the service, and the install steps in one place.

Free to use. Works in your browser. No signup, no login.

Related tools

You may also like

All tools
All toolsDeveloper Tools