Turn a crontab line into a systemd OnCalendar= value with ready .timer and .service units
Runs in your browser. Nothing you type is sent anywhere. Checked against sources on 17 Oct 2026.Moving a job from cron to a systemd timer gains logging, catch-up after downtime with Persistent=true and resource limits. Paste the crontab line, such as 30 2 * * 1-5 /usr/local/bin/backup.sh, and get OnCalendar=Mon..Fri *-*-* 02:30:00 plus both unit files. The next five runs are shown for both, and a warning appears where cron and systemd read the two day fields differently.
Paste or type your input.
Choose the options you need.
Press Ctrl+Enter, then copy or download.
systemd timers replace cron on most Linux servers, but the OnCalendar= syntax is easy to get subtly wrong: is 9:00 every day or only weekdays, does */15 work, when does the job first run? This page answers by computing the schedule the way systemd does.
Cron to timer. Paste a crontab line, macros such as @daily included, and get the equivalent OnCalendar= value, the next 5 runs, and a .timer and .service pair ready for /etc/systemd/system. One difference matters: when a cron line restricts both the day of month and the day of week, cron runs when either matches, while systemd needs both; the page warns and suggests two OnCalendar= lines.
How it was checked. For 48 test values and 22 converted crontab lines, the normalized form and next 5 runs match systemd 255's own systemd-analyze calendar, invalid values are refused where systemd refuses them, and every converted cron line fires at the same instants as cron-parser computes for the original. Everything runs in your browser.
The rest of the article, and all 6 questions about systemd OnCalendar Tester, are on the systemd OnCalendar Tester page.
Use OnCalendar=*:0/15, which systemd normalizes to *-*-* *:00/15:00 and fires at minutes 0, 15, 30 and 45 of every hour. For a fixed interval since the last run instead of clock times, use OnUnitActiveSec=15min in the timer. Type either schedule here to see the next runs.
Mon..Fri limits the timer to weekdays, *-*-* means any year, month and day, and 09:00 is the time, with seconds defaulting to 00. Together the timer fires at 9 am Monday to Friday, in the server's local time zone unless UTC or another zone is added at the end.
Paste the crontab line on the Cron to timer tab. The five time fields become an OnCalendar= value, for example 30 2 * * 1-5 becomes Mon..Fri *-*-* 02:30:00, and the command becomes ExecStart= in a .service file. Save both units, then run systemctl daemon-reload and systemctl enable --now with the timer name.
With Persistent=true, systemd stores when the timer last fired; if the machine was off at a scheduled time, the job runs once as soon as the timer starts again. Cron simply skips missed runs. The generated .timer file sets Persistent=true because backups and reports usually should not be skipped.
Rates and rules change; check the source before you rely on a figure.
Still stuck? Ask about systemd OnCalendar Tester and anybody who knows can answer. No account needed.
On the related tools: Readability Checker – Flesch reading ease and grade level, with what to change · JSONPath Evaluator – Evaluate a JSONPath expression and get the matching values and their paths.