crontool
Paste a schedule, read it in English, see the next runs.

systemd Timer OnCalendar (Cron Equivalent)

systemd timers use OnCalendar= instead of cron syntax. The format is DayOfWeek Year-Month-Day Hour:Minute:Second. It is more explicit than cron, and you can always check the next firing with systemd-analyze calendar.

The OnCalendar format

OnCalendar=DOW YYYY-MM-DD HH:MM:SS. Daily at 09:00 (cron 0 9 * * *): OnCalendar=*-*-* 09:00:00. Every weekday at 09:00: OnCalendar=Mon..Fri *-*-* 09:00:00. Every 15 minutes: OnCalendar=*:0/15.

The two unit files

Create myjob.timer with [Timer] OnCalendar=... and Persistent=true, plus a matching myjob.service that runs the command. Enable with systemctl enable --now myjob.timer.

Verify the schedule

systemd-analyze calendar "Mon..Fri *-*-* 09:00:00" prints the next elapse time. systemctl list-timers shows all active timers and when they fire next.

Why use it over cron

Persistent=true runs a missed job after downtime, logs go to the journal, and dependencies/resource limits come from systemd.

FAQ

What is the systemd equivalent of 0 9 * * *?

OnCalendar=*-*-* 09:00:00 runs daily at 9 AM. For weekdays only use OnCalendar=Mon..Fri *-*-* 09:00:00.

How do I check when a systemd timer will next run?

Use systemd-analyze calendar "<expression>" to preview the next elapse, or systemctl list-timers to see all timers and their next firing.

Why choose a systemd timer over cron?

Persistent=true catches up missed runs after downtime, output goes to the journal, and you get systemd's dependency and resource controls.