Why convert TIMER to CRON?
A systemd .timer and a cron job both schedule recurring commands, so admins moving off systemd want the same schedule expressed as .CRON syntax. The OnCalendar= calendar expression maps cleanly onto cron's minute-hour-day-month-weekday fields for most common schedules.
How to convert TIMER to CRON
crontab + manual mapping FREE
Run crontab -e and add a line whose five time fields match the timer, e.g. OnCalendar=*-*-* 02:00:00 becomes 0 2 * * * /path/to/command.
systemd-analyze calendar FREE
Run systemd-analyze calendar "*-*-* 02:00:00" to confirm the exact next run times of the OnCalendar value before you translate it into cron fields.
About these formats
A .timer file is a systemd unit that schedules when another unit (usually a matching .service file) runs on Linux, working as a modern replacement for cron. It is a small plain-text file in…
Open .TIMER details →A .CRON file is associated with Unraid OS Cron data, a misc file.
Open .CRON details →Quality & what to watch
- Only the schedule moves; the command, environment and user come from the paired
.servicefile and must be added to the cron line yourself. - systemd extras like
Persistent=(catch-up after downtime),RandomizedDelaySec=and accuracy windows have no cron equivalent and are lost. - Sub-minute or complex
OnCalendarexpressions can't be represented in cron's minute-level, five-field syntax.
Frequently asked questions
Is there an automatic timer-to-cron converter?
OnCalendar= schedule to cron fields by hand, optionally verifying with systemd-analyze calendar and crontab.guru.Where does the command for the cron line come from?
ExecStart= in the matching .service unit that the timer activates.How do I convert `@daily`-style schedules?
OnCalendar=*-*-* 00:00:00 equals @daily or 0 0 * * * in cron.Will catch-up runs still work?
Persistent=true does.