Cron Expression Generator
Type a cron expression or edit each field. The meaning and next run times update as you type.
Every 5 minutes
Next 5 runs in UTC, from 1 Jan 2026 (example)
Common schedules
Cron syntax in one minute
┌ minute (0–59) │ ┌ hour (0–23) │ │ ┌ day of month (1–31) │ │ │ ┌ month (1–12 or JAN–DEC) │ │ │ │ ┌ day of week (0–6, Sunday = 0 or 7, or SUN–SAT) * * * * *
An asterisk matches every value. A hyphen gives a range (1-5), a comma a list (1,15) and a slash a step (*/10, or 5-59/10 to start at a different minute). Month and weekday names are case-insensitive three-letter abbreviations.
When both day of month and day of week are restricted, classic cron runs the job if either matches. That rule surprises almost everyone the first time.
Shorthands
| Shorthand | Expression | Meaning |
|---|---|---|
@yearly | 0 0 1 1 * | At 00:00, on day 1 of the month, in January |
@monthly | 0 0 1 * * | At 00:00, on day 1 of the month |
@weekly | 0 0 * * 0 | At 00:00, on Sunday |
@daily | 0 0 * * * | At 00:00, every day |
@hourly | 0 * * * * | At the start of every hour |
@reboot also exists in Vixie cron and cronie, but it has no next run time, so it is not listed.
More examples
| Expression | Meaning |
|---|---|
0 */3 * * * | Every 3 hours, at minute 0 |
15 14 1 * * | At 14:15, on day 1 of the month |
0 22 * * 1-5 | At 22:00, on weekdays (Monday to Friday) |
0 0 1 1,7 * | At 00:00, on day 1 of the month, in January and July |
*/10 9-17 * * MON-FRI | Every 10 minutes during hours 9-17, on Monday, Tuesday, Wednesday, Thursday and Friday |
0 6 * * SAT,SUN | At 06:00, on Sunday and Saturday |
When a job does not run
- Confirm the daemon is alive (
systemctl status cronorcrond) and that you edited the right user's crontab. - Look for the trigger in system logs. If cron started the command, the problem is inside the command, not the schedule.
- Replace relative paths with absolute ones and set needed environment variables at the top of the crontab; cron does not load your shell profile.
- Escape every percent sign as
\%and end the file with a newline — some implementations ignore an unterminated last line.
Why build schedules here
Writing a crontab line by hand is quick; verifying it is not. Seeing the next five executions catches swapped fields, wrong weekday numbering and accidental per-minute runs before they reach production. Nothing you type leaves this page, so internal hostnames or script paths stay private.
Where cron expressions are used
Linux and macOS read them from crontab -e. Kubernetes CronJobs, GitHub Actions workflows, Cloudflare Workers cron triggers and most job libraries accept the same five fields. Quartz and Spring add a seconds field in front and count weekdays from 1, so translate carefully when moving a schedule between them.
Some dialects extend the format. Quartz expects six or seven fields, adding seconds at the start and an optional year at the end, and understands L for the last day of a month, W for the nearest weekday and # for the n-th weekday. Jenkins accepts H, a hash that spreads jobs pseudo-randomly across the range so hundreds of builds do not start simultaneously. These extensions are not valid in a plain crontab.
Run times here are calculated in your browser. Remember that servers and hosted schedulers usually work in UTC, so switch the list to UTC before trusting a schedule that has to fire at a local business hour.