Need a crontab line without memorizing the five fields? Pick a preset above, edit minute, hour, day, month, and weekday, or paste an expression like */15 9-17 * * 1-5. Copy the line, a plain-English schedule, the next run times, and a systemd OnCalendar= equivalent. This cron expression builder is part of the Linux tools on TechOpt.io. For file modes on the script itself, use the chmod calculator.
How this cron expression builder maps the five fields
A crontab entry is five timing fields, then a command, as documented in crontab(5). crond (Vixie cron on Debian/Ubuntu, cronie on Fedora and RHEL) reads those fields and runs the command when every field matches the current local time of the host — except when both day-of-month and day-of-week are restricted, as described below.
Field reference
| Field | Values | Examples |
|---|---|---|
| Minute | 0–59 | *, 0, */15, 0,30 |
| Hour | 0–23 | 0, 9-17, */2 |
| Day of month | 1–31 | *, 1, 1,15 |
| Month | 1–12 or JAN–DEC | *, 1, JAN,JUL |
| Day of week | 0–7 or SUN–SAT (0 and 7 are Sunday) | *, 1-5, MON,FRI |
* means every value. A list is comma-separated. A range uses a hyphen. A step after a star or range runs every Nth value: */15 in minutes is 0, 15, 30, and 45.
Day of month vs day of week
If either day field is *, the other one is ANDed as usual. If both are restricted (not *), Vixie cron ORs them: the job runs when the day-of-month matches or the weekday matches. 0 0 1,15 * 5 is midnight on the 1st and 15th, and also every Friday. systemd timers AND those two fields, so the same OnCalendar= is not identical — check the next-run list before you convert.
Nicknames
| Nickname | Expands to | Meaning |
|---|---|---|
@hourly | 0 * * * * | Minute 0 of every hour |
@daily / @midnight | 0 0 * * * | Midnight every day |
@weekly | 0 0 * * 0 | Midnight on Sunday |
@monthly | 0 0 1 * * | Midnight on the 1st |
@yearly / @annually | 0 0 1 1 * | Midnight on 1 January |
@reboot | — | Once when the system starts |
systemd’s weekly nickname is Monday, not Sunday. Prefer an explicit Sun *-*-* 00:00:00 (the builder’s OnCalendar= line) when you convert @weekly.
FAQ
What is a cron expression?
A Linux cron expression is five fields — minute, hour, day of month, month, and day of week — that tell crond when to run a command. */15 9-17 * * 1-5 means every 15 minutes from 09:00 through 17:00 on Monday through Friday.
What do the five cron fields mean?
From left to right: minute (0–59), hour (0–23), day of month (1–31), month (1–12 or JAN–DEC), and day of week (0–7 or SUN–SAT, where both 0 and 7 are Sunday). * means every value. Lists, ranges, and steps (*/15, 1-5, 0,30) are allowed.
How do day of month and day of week work together?
In Vixie cron (Debian, Ubuntu, cronie), if both day of month and day of week are restricted — not * — the job runs when either field matches. 0 0 1,15 * 5 runs at midnight on the 1st and 15th and every Friday. systemd timers AND the two fields instead.
What are @hourly and @daily?
They are nicknames for common schedules: @hourly is 0 * * * *, @daily (and @midnight) is 0 0 * * *, @weekly is 0 0 * * 0 (Sunday), @monthly is 0 0 1 * *, @yearly is 0 0 1 1 *, and @reboot runs once when the system starts.
Does this cron builder upload my schedule?
No. It runs entirely in your browser. Expressions and commands never leave your machine.
Can I use this for Quartz or AWS EventBridge cron?
No. Those dialects add seconds (and sometimes a year), and they use ?, L, W, and #. This tool is Linux crontab only. Paste a Quartz expression and it will tell you it is unsupported.
How do I convert a crontab line to a systemd timer?
Copy the OnCalendar= line from the builder into a *.timer unit. systemd weekly is Monday, while cron @weekly is Sunday midnight, and systemd ANDs day-of-month with day-of-week. Check the next-run list before installing the timer.
Looking for more Linux how-tos? Browse the Linux guides or the rest of the tools.