Try the Cron Explainer

Cron Explainer — Understand Any Cron Expression in Plain English

By sadiqbd · June 6, 2026

Cron Explainer — Understand Any Cron Expression in Plain English

Cron expressions are powerful and cryptic in equal measure

Five (or six) fields of numbers, asterisks, slashes, and commas — a cron expression tells a scheduler exactly when to run a job. Get it right and your database backup runs every night at 2 AM. Get it wrong and it runs every minute, or never at all, or on the wrong day of the week.

The problem is that cron syntax is not self-documenting. 0 2 * * 1-5 is correct for "2 AM on weekdays" — but you'd never know that by looking at it. A cron explainer translates these expressions into plain English and validates them before you deploy.


Cron Expression Syntax

A standard cron expression has five fields:

┌───────────── minute (0–59)
│ ┌───────────── hour (0–23)
│ │ ┌───────────── day of month (1–31)
│ │ │ ┌───────────── month (1–12)
│ │ │ │ ┌───────────── day of week (0–7, Sun=0 or 7)
│ │ │ │ │
* * * * *

Some systems (AWS EventBridge, Spring, Quartz) use a sixth field for seconds:

* * * * * *
second minute hour day-of-month month day-of-week

Special Characters

Character Meaning Example
* Every value * * * * * = every minute
, List of values 0,30 * * * * = at :00 and :30
- Range 0 9-17 * * * = every hour 9 AM–5 PM
/ Step/interval */15 * * * * = every 15 minutes
L Last (some systems) 0 0 L * * = last day of month
W Nearest weekday (some) 0 0 15W * * = nearest weekday to 15th
# Nth weekday (some) 0 0 * * 5#2 = 2nd Friday of month

How to Use the Cron Explainer on sadiqbd.com

  1. Enter the cron expression — paste in any 5 or 6-field cron string.
  2. Read the plain English explanation — the tool tells you exactly when the job runs.
  3. See next run times — most explainers show the next 5–10 scheduled executions so you can verify the pattern is what you intended.

Real-World Examples

Common cron schedules decoded

Expression Meaning
* * * * * Every minute
0 * * * * Every hour, on the hour
0 0 * * * Every day at midnight
0 2 * * * Every day at 2:00 AM
0 9 * * 1-5 9:00 AM on weekdays (Mon–Fri)
0 0 * * 0 Every Sunday at midnight
*/15 * * * * Every 15 minutes
0 */6 * * * Every 6 hours (midnight, 6 AM, noon, 6 PM)
0 0 1 * * 1st of every month at midnight
0 0 1 1 * January 1st at midnight (yearly)
30 23 * * 5 Every Friday at 11:30 PM
0 2 * * 1-5 2:00 AM on weekdays only
0 8-18 * * 1-5 Every hour from 8 AM–6 PM on weekdays

Scheduling a database backup

You want a full database backup every day at 3 AM:

0 3 * * *

Explainer output: "At 3:00 AM, every day" ✓

You want a weekly backup every Sunday at 1 AM in addition:

0 1 * * 0

"At 1:00 AM, only on Sunday" ✓

Report generation job

A financial report needs to run on the 1st and 15th of every month at 6 AM:

0 6 1,15 * *

"At 6:00 AM, on day 1 and 15 of the month" ✓

Cache invalidation every 30 minutes during business hours

You only want cache invalidation during business hours (8 AM–6 PM on weekdays):

*/30 8-17 * * 1-5

"Every 30 minutes, between 8 AM and 5:59 PM, Monday through Friday"

Note: 8-17 covers minutes :00 through :59 of hours 8 through 17 — the last run is at 17:30 (5:30 PM), not 18:00. If you need the 6 PM run, use 8-18.


Common Cron Mistakes

Month and day-of-week are OR'd, not AND'd. 0 0 15 * 1 runs at midnight on the 15th of any month AND every Monday — not "the 15th that falls on a Monday." Most cron implementations treat day-of-month and day-of-week as OR conditions when both are non-wildcard.

Sunday can be 0 or 7. In standard cron, 0 = Sunday and 7 = Sunday. Both are valid and mean the same thing. Some systems only accept one form — the explainer clarifies which Sunday value is being used.

*/5 in the hour field means "every 5 hours," not "every 5 minutes." Field position matters. */5 * * * * = every 5 minutes. * */5 * * * = every minute of every 5th hour.

Cron runs in server time, not local time. If your server is UTC and you're in UTC+6, "2 AM" in your cron file is actually 8 AM your time. Always confirm what time zone your cron daemon runs in.

No built-in error handling. If a cron job fails, cron doesn't retry it. Use a job scheduler with retry logic (Celery, Sidekiq, cloud scheduler services) for anything important.


Cron Variations Worth Knowing

@reboot — run once at startup @hourly — equivalent to 0 * * * * @daily — equivalent to 0 0 * * * @weekly — equivalent to 0 0 * * 0 @monthly — equivalent to 0 0 1 * * @yearly / @annually — equivalent to 0 0 1 1 *

These aliases are supported in most Linux cron implementations (Vixie cron, systemd timers) but not in all scheduling platforms.


Tips for Writing Reliable Cron Expressions

Always verify with an explainer before deploying. What you think you wrote and what cron interprets can differ. Checking against the plain English output and the next run times takes 10 seconds and catches most errors.

Use absolute paths in cron commands. Cron runs with a minimal environment — $PATH doesn't include your usual directories. Use full paths: /usr/bin/python3 /home/user/scripts/backup.py, not just python3 backup.py.

Redirect output to a log file. By default, cron emails output to the system user. Redirect to a log: 0 3 * * * /path/to/script.sh >> /var/log/backup.log 2>&1

Stagger jobs that run on the same schedule. If multiple cron jobs all run at 0 * * * *, they start simultaneously and can overwhelm database connections, file handles, or CPU. Offset them: 0 * * * *, 5 * * * *, 10 * * * *.


Frequently Asked Questions

What's the difference between cron and a cron job? Cron is the daemon (background service) that reads a schedule and triggers jobs. A cron job is a specific entry in a crontab file — a command paired with its schedule.

Does cron support seconds-level scheduling? Standard Unix/Linux cron does not — its minimum interval is 1 minute. For sub-minute scheduling, use systemd timers, or application-level schedulers like Celery (Python) or Sidekiq (Ruby) that support seconds.

What is a crontab? Short for "cron table" — the file that contains cron job schedules. Edit with crontab -e, list with crontab -l, remove all with crontab -r (be careful with that last one).

Why isn't my cron job running? Common reasons: wrong time zone, missing executable permission on the script, relative path that cron can't resolve, environment variables not set (cron has a minimal $PATH), or syntax error in the expression. The cron explainer catches the last one.

Is the cron explainer free? Yes — completely free, instant, no sign-up required.


Cron expressions are used constantly in server administration, backend development, and DevOps — and misread just as often. The explainer converts five fields of symbols into a sentence you can actually verify in 5 seconds.

Try the Cron Explainer free at sadiqbd.com — paste any cron expression and see exactly when it runs, in plain English.

Try the related tool:
Open tool