Cron Cheat Sheet

Everything you need to write a cron expression: the five fields, special characters, shortcuts, 27 common schedules you can copy, and the gotchas that make jobs not run.

Cheat sheetPrintableFree, no login

Updated 28 October 2026

Check any expression: plain-English meaning and the next 10 run times in your time zone.

Open the cron parser

Cron syntax: the five fields

┌───────────── minute (0–59)
│ ┌─────────── hour (0–23)
│ │ ┌───────── day of month (1–31)
│ │ │ ┌─────── month (1–12 or JAN–DEC)
│ │ │ │ ┌───── day of week (0–6 or SUN–SAT, Sunday = 0)
│ │ │ │ │
* * * * *  command-to-run

A cron expression has five fields separated by spaces. The job runs every minute in which all fields match the current time — with one exception for the two day fields, explained under gotchas.

FieldAllowed valuesSpecial characters
1. Minute0–59* , - /
2. Hour0–23* , - /
3. Day of month1–31* , - /
4. Month1–12 or JAN–DEC* , - /
5. Day of week0–6 (Sunday = 0; most systems also accept 7 for Sunday) or SUN–SAT* , - /

Special characters

CharacterMeaningExampleRuns
*Every value* * * * *Every minute
,List of values0 9,17 * * *At 09:00 and 17:00
-Range of values0 9 * * 1-5At 09:00, Monday to Friday
/Step: every n-th value*/15 * * * *Every 15 minutes
1-30/10Step inside a range1-30/10 * * * *At minutes 1, 11 and 21

Steps count from the start of the range: */15 in the minute field means minutes 0, 15, 30 and 45. Names like MON and JAN are not case-sensitive.

Common cron schedules

ExpressionRuns
* * * * *Every minuteTry ↗
*/5 * * * *Every 5 minutesTry ↗
*/10 * * * *Every 10 minutesTry ↗
*/15 * * * *Every 15 minutesTry ↗
*/30 * * * *Every 30 minutesTry ↗
0 * * * *Every hour, on the hourTry ↗
0 */2 * * *Every 2 hours (00:00, 02:00, 04:00 …)Try ↗
0 */6 * * *Every 6 hours (00:00, 06:00, 12:00, 18:00)Try ↗
0 0 * * *Every day at midnightTry ↗
0 9 * * *Every day at 09:00Try ↗
30 6 * * *Every day at 06:30Try ↗
0 2 * * *Every day at 02:00 — a common time for backupsTry ↗
0 9,17 * * *Every day at 09:00 and 17:00Try ↗
0 9 * * 1-5At 09:00 on weekdays (Monday to Friday)Try ↗
0 9-17 * * 1-5Every hour from 09:00 to 17:00 on weekdaysTry ↗
*/15 9-17 * * 1-5Every 15 minutes from 09:00 to 17:45 on weekdaysTry ↗
0 0 * * 1-5Midnight on weekdaysTry ↗
0 10 * * 6,0At 10:00 on Saturday and SundayTry ↗
0 0 * * 0Midnight every SundayTry ↗
0 12 * * 1Noon every MondayTry ↗
0 18 * * 5At 18:00 every FridayTry ↗
5 4 * * 0At 04:05 every SundayTry ↗
0 0 1 * *Midnight on the 1st of every monthTry ↗
0 0 15 * *Midnight on the 15th of every monthTry ↗
0 0 1,15 * *Midnight on the 1st and 15th of every monthTry ↗
0 0 1 */3 *Midnight on the first day of each quarter (Jan, Apr, Jul, Oct)Try ↗
0 0 1 1 *Midnight on 1 JanuaryTry ↗

Click an expression to copy it, or Try ↗ to see its next 10 run times in the cron parser.

Shortcuts (@daily, @hourly …)

ShortcutSame asRuns
@yearly / @annually0 0 1 1 *Midnight on 1 January
@monthly0 0 1 * *Midnight on the 1st of every month
@weekly0 0 * * 0Midnight every Sunday
@daily / @midnight0 0 * * *Every day at midnight
@hourly0 * * * *At the start of every hour
@reboot—Once, when the cron daemon starts

Shortcuts work in Linux crontab (cronie, Vixie cron) and Kubernetes CronJobs. GitHub Actions and AWS EventBridge don't accept them — use the five-field form.

Gotchas: why cron jobs don't run when you expect

Cron in GitHub Actions, Kubernetes, AWS and Spring

SystemFormatTime zoneWeekdays at 09:00
Linux crontab5 fieldsServer time zone0 9 * * 1-5 /path/to/script.sh
GitHub Actions5 fieldsUTC- cron: '0 9 * * 1-5'
Kubernetes CronJob5 fields or @shortcutController, or spec.timeZoneschedule: "0 9 * * 1-5"
AWS EventBridge6 fields, adds year; one day field must be ?UTC by defaultcron(0 9 ? * MON-FRI *)
Spring @Scheduled6 fields, seconds firstServer time zone@Scheduled(cron = "0 0 9 * * MON-FRI")
Quartz6–7 fields, seconds first; one day field must be ?Server time zone0 0 9 ? * MON-FRI

crontab commands

CommandWhat it does
crontab -eEdit your crontab
crontab -lList your cron jobs
crontab -rDelete all your cron jobs (no confirmation — back up with crontab -l > backup.txt first)
sudo crontab -u alice -lList another user's cron jobs
grep CRON /var/log/syslogSee when jobs ran (Debian, Ubuntu)
journalctl -u cronCron logs on systemd (the unit is crond on Red Hat, Fedora)
*/5 * * * * /path/job.sh >> /var/log/job.log 2>&1Save a job's output and errors to a log file

Frequently asked questions

What does * * * * * mean in cron?
Five asterisks mean "every minute of every hour of every day". The job runs once a minute.
How do I run a cron job every 5 minutes?
Use */5 * * * *. The */5 in the minute field means minutes 0, 5, 10 … 55.
How do I run a cron job on weekdays only?
Put 1-5 in the day-of-week field, for example 0 9 * * 1-5 for 09:00 Monday to Friday.
Why didn't my cron job run?
The usual causes: the server is in a different time zone than you expect, the command needs a full path because cron's PATH is short, an unescaped % in the command, the script isn't executable, or both day fields are set so the schedule is not what you meant. Check the cron log (grep CRON /var/log/syslog).
Can cron run every 30 seconds?
Not directly — standard cron's smallest unit is one minute. A common workaround is two jobs: * * * * * job and * * * * * sleep 30; job. For sub-minute schedules, consider a systemd timer.
✓ Copied!