Need a cron expression fast? Copy the one you need from the list below, or keep reading for a plain-English breakdown of how cron syntax actually works.
┌───────────── minute (0–59) │ ┌───────────── hour (0–23) │ │ ┌───────────── day of month (1–31) │ │ │ ┌───────────── month (1–12) │ │ │ │ ┌───────────── day of week (0–6, Sunday = 0) │ │ │ │ │ * * * * *
An asterisk (*) means "every possible value." A */n means "every n units." Once you know that, most expressions read like sentences.
Cron cheat sheet: common schedules
- Every minute — * * * * *
- Every 5 minutes — */5 * * * *
- Every 10 minutes — */10 * * * *
- Every 15 minutes — */15 * * * *
- Every 30 minutes — */30 * * * *
- Every hour on the hour — 0 * * * *
- Every 2 hours — 0 */2 * * *
- Every 6 hours — 0 */6 * * *
- Every day at midnight — 0 0 * * *
- Every day at 6:00 AM — 0 6 * * *
- Every day at 6:00 PM — 0 18 * * *
- Twice a day at 9 AM and 9 PM — 0 9,21 * * *
- Every Monday at 9:00 AM — 0 9 * * 1
- Weekdays only at 8:00 AM — 0 8 * * 1-5
- Weekends only at 10:00 AM — 0 10 * * 0,6
- First day of every month — 0 0 1 * *
- Last-day handling (run on the 28th) — 0 0 28 * *
- Every Sunday at midnight — 0 0 * * 0
- Every quarter — 0 0 1 1,4,7,10 *
- Once a year on Jan 1 at midnight — 0 0 1 1 *
Want to build or verify a custom schedule? Use our free Cron Expression Generator to translate any expression into plain English instantly.
How to read a cron expression
Take 0 8 * * 1-5: at minute 0, of hour 8, every day of the month, every month, Monday through Friday. Read together: "At 8:00 AM, Monday through Friday."
Common mistakes that break cron jobs
Confusing 0 * * * * with * * * * *. The first runs once per hour. The second runs every single minute — sixty times more often. If your server logs are exploding, check this first.
Day-of-month and day-of-week together: 0 9 1 * 1 does not mean "the 1st of the month if it is a Monday." Standard cron runs the job when either field matches, so it fires on every 1st and every Monday.
Forgetting the server timezone: cron uses the server's local time, which is often UTC on cloud hosting. A job set for 0 9 * * * on a UTC server runs at 9:00 UTC — which may be 2:00 AM your local time.
Assuming seconds exist: standard Unix cron has five fields and no seconds. Six-field expressions with seconds belong to Quartz or Spring schedulers and will fail in crontab.
Test your expression before it goes live
- Paste it into the Cron Expression Generator and read the plain-English translation back.
- Temporarily point the job at a harmless command such as echo "ran at $(date)" >> /tmp/cron-test.log and confirm the timestamps match your intent.
- List your active jobs with crontab -l and edit with crontab -e.
FAQ
What does */5 * * * * mean in cron? It runs a job every 5 minutes, at minutes 0, 5, 10, 15, and so on of every hour, every day.
How do I run a cron job every hour? Use 0 * * * *. This fires at minute 0 of every hour. Using * * * * * by mistake will run it every minute instead.
How do I schedule a cron job for weekdays only? Use 1-5 in the day-of-week field, e.g. 0 8 * * 1-5 for 8:00 AM Monday through Friday.
Does cron use my timezone? No — cron uses the server's local time, which is often UTC on cloud servers. Convert your target time to the server's timezone, or set CRON_TZ if your implementation supports it.
What is the difference between cron and crontab? Cron is the daemon that runs scheduled jobs. Crontab is the file where you list those jobs.
Can cron run a job every 30 seconds? Not natively — the smallest cron interval is one minute. Common workarounds are scheduling the same job twice with a sleep 30 in one entry, or using systemd timers.