DEV Community

Jack
Jack

Posted on Originally published at anethoth.com

The Ultimate Cron Expression Cheat Sheet (With Examples)

Cron expressions are one of those things every developer needs but nobody memorizes. Bookmark this — you'll thank yourself later.

The Format

┌───────────── minute (0-59)
│ ┌───────────── hour (0-23)
│ │ ┌───────────── day of month (1-31)
│ │ │ ┌───────────── month (1-12)
│ │ │ │ ┌───────────── day of week (0-7, Sun=0 or 7)
│ │ │ │ │
* * * * *
Enter fullscreen mode Exit fullscreen mode

Special Characters

Char Meaning Example
* Any value * * * * * = every minute
, List 1,15 * * * * = minute 1 and 15
- Range 1-5 * * * * = minutes 1 through 5
/ Step */10 * * * * = every 10 minutes

Common Schedules You'll Actually Use

Every X minutes

*/5 * * * *    # Every 5 minutes
*/15 * * * *   # Every 15 minutes
*/30 * * * *   # Every 30 minutes
Enter fullscreen mode Exit fullscreen mode

Hourly

0 * * * *      # Top of every hour
30 * * * *     # Half past every hour
0 */2 * * *    # Every 2 hours
0 */6 * * *    # Every 6 hours
Enter fullscreen mode Exit fullscreen mode

Daily

0 0 * * *      # Midnight
0 9 * * *      # 9:00 AM
0 9 * * 1-5    # 9:00 AM, weekdays only
30 2 * * *     # 2:30 AM (good for backups)
Enter fullscreen mode Exit fullscreen mode

Weekly

0 0 * * 0      # Midnight Sunday
0 0 * * 1      # Midnight Monday
0 9 * * 1      # 9 AM Monday (weekly report)
0 17 * * 5     # 5 PM Friday (weekly digest)
Enter fullscreen mode Exit fullscreen mode

Monthly

0 0 1 * *      # Midnight, 1st of month
0 9 1 * *      # 9 AM, 1st of month
0 0 15 * *     # Midnight, 15th of month
0 0 1 */3 *    # Quarterly (Jan, Apr, Jul, Oct)
Enter fullscreen mode Exit fullscreen mode

Yearly

0 0 1 1 *      # Midnight, January 1st
0 9 1 1 *      # 9 AM, January 1st
Enter fullscreen mode Exit fullscreen mode

Common Mistakes

* * * * * doesn't mean "once a day"

It means every single minute. That's 1,440 times per day.

❌ Day of week starts at 0 (Sunday)

* * * * 1 = Monday, not Tuesday. Both 0 and 7 mean Sunday.

❌ No second-level precision

Standard cron doesn't support seconds. If you need sub-minute scheduling, use a different tool.

❌ Month and DOW are OR, not AND

0 0 15 * 5 runs on the 15th AND every Friday, not only on Fridays that fall on the 15th.

Validate Before Deploying

Never push a cron expression without checking it first:

# Describe what a cron expression does
curl "https://cronping.anethoth.com/api/v1/cron/describe?expr=*/15+*+*+*+*"

# See the next 5 run times
curl "https://cronping.anethoth.com/api/v1/cron/next?expr=0+9+*+*+1&count=5"

# Validate syntax
curl "https://cronping.anethoth.com/api/v1/cron/validate?expr=0+0+31+2+*"
Enter fullscreen mode Exit fullscreen mode

These are free, no signup required. CronPing Cron API docs

Pro Tips

  1. Add randomness for backups: Use RANDOM=$((RANDOM % 60)) sleep to avoid thundering herd
  2. Log everything: 0 * * * * /path/script.sh >> /var/log/cron.log 2>&1
  3. Use flock to prevent overlap: * * * * * flock -n /tmp/job.lock /path/script.sh
  4. Monitor your crons: A cron that fails silently is worse than no cron at all. Use a dead man's switch to alert when jobs don't run.
  5. Test in a non-production environment first: crontab -l to review, crontab -e to edit

Bookmark this. Star it. Whatever helps you find it when you need it at 3 AM.

What cron schedule do you use most often? Drop it in the comments 👇

Top comments (0)