Cron Expression Examples
A reference guide to cron syntax with common schedule patterns — from every minute to complex multi-field expressions — with plain-English explanations.
Cron field order
A standard cron expression has five space-separated fields. From left to right: minute (0–59), hour (0–23), day of month (1–31), month (1–12), day of week (0–7, where both 0 and 7 are Sunday). An asterisk (*) means 'every valid value for this field'.
┌───── minute (0–59)
│ ┌───── hour (0–23)
│ │ ┌───── day of month (1–31)
│ │ │ ┌───── month (1–12)
│ │ │ │ ┌───── day of week (0–7, Sun=0 or 7)
│ │ │ │ │
* * * * *Common schedule patterns
The table below shows the most frequently used cron expressions. Copy any of them directly into your crontab, GitHub Actions schedule, or cloud scheduler.
# Every minute
* * * * *
# Every 5 minutes
*/5 * * * *
# Every 15 minutes
*/15 * * * *
# Every hour (at the top of the hour)
0 * * * *
# Every day at midnight UTC
0 0 * * *
# Every day at 9 AM UTC
0 9 * * *
# Every weekday (Mon–Fri) at 8 AM UTC
0 8 * * 1-5
# Every Monday at 6 AM UTC
0 6 * * 1
# First day of every month at midnight
0 0 1 * *
# Every quarter (Jan, Apr, Jul, Oct) on the 1st at midnight
0 0 1 1,4,7,10 *
# Every Sunday at 2 AM UTC (common for weekly backups)
0 2 * * 0Special syntax: step values
The /n syntax means 'every n units'. Combined with a range, you can express schedules like 'every 10 minutes between 8 AM and 6 PM'.
# Every 10 minutes
*/10 * * * *
# Every 10 minutes between 8 AM and 6 PM
*/10 8-18 * * *
# Every 2 hours
0 */2 * * *
# Every 6 hours
0 */6 * * *Lists and ranges
Commas create lists; hyphens create ranges. You can combine them within a single field.
# At 8 AM and 6 PM every day
0 8,18 * * *
# Weekdays (Mon through Fri)
0 0 * * 1-5
# At 9 AM on Mon, Wed, and Fri
0 9 * * 1,3,5
# Every minute during the 9 AM and 2 PM hours
* 9,14 * * *Non-standard extensions (@reboot, @daily, etc.)
Many cron implementations support shorthand nicknames. These are not part of the POSIX spec and may not work in all environments — check your platform's documentation.
@reboot # Run once at system startup
@yearly # 0 0 1 1 * — once a year
@annually # same as @yearly
@monthly # 0 0 1 * * — once a month
@weekly # 0 0 * * 0 — once a week
@daily # 0 0 * * * — once a day
@midnight # same as @daily
@hourly # 0 * * * * — once an hourGitHub Actions cron schedules
GitHub Actions uses the standard five-field syntax in the on.schedule trigger. All times are UTC. The minimum supported interval is every 5 minutes, and schedules may be delayed by up to 30 minutes during high load.
on:
schedule:
# Run every day at 3:30 AM UTC
- cron: "30 3 * * *"
# Also run every Monday at 9 AM UTC
- cron: "0 9 * * 1"What timezone does cron use?
By default, cron runs in the system timezone of the server, which is often UTC on cloud machines. Always check — and consider making UTC explicit — to avoid surprises around daylight saving time transitions.
Why does my cron job not run at the expected time?
Common causes: the server timezone is not what you assumed, the minimum interval is 1 minute so sub-minute schedules are not possible, or the job was skipped because the previous run was still active. Check your platform's logs first.
Can cron run a job every 30 seconds?
Standard cron cannot — the smallest unit is 1 minute. To run every 30 seconds, schedule the job every minute and have the script sleep 30 seconds and then run again, or use a purpose-built scheduler with sub-minute precision.
How to Convert Units
A practical guide to unit conversion — understand the metric and imperial systems, common conversion factors, and how to convert length, weight, temperature, and volume accurately.
Read guide →How chmod and File Permissions Work
A practical guide to Unix file permissions — reading the permission string, understanding octal notation, using chmod and chown, and common secure permission patterns.
Read guide →How to Read HTTP Headers
A practical guide to HTTP headers — request vs response headers, what the most important ones mean, how to inspect them in the browser and curl, and security headers you should be setting.
Read guide →