/

Cron: Every 20 Minutes

*/20 * * * * fires three times an hour — at :00, :20, and :40. Unlike step values such as */45 that don't evenly divide 60, 20 divides cleanly into 60, so this produces a genuinely consistent, rolling interval rather than an uneven alternating gap.

*/20 * * * *

Examples & Variations

*/20 * * * *

Every 20 minutes, all day

Try it

*/20 9-17 * * *

Every 20 minutes, 9 AM–5 PM only

Try it

*/20 * * * 1-5

Every 20 minutes, weekdays only

Try it

Common Mistakes

  • Assuming */20 needs the same 'does it divide evenly' caution as */45 — it doesn't. 20 is one of the clean divisors of 60 (along with 1, 2, 3, 4, 5, 6, 10, 12, 15, 30), so the interval is genuinely even.
  • Using every-20-minutes for something that needs true real-time responsiveness — three checks an hour is a moderate polling cadence, not a substitute for a push-based or event-driven trigger.
  • Not accounting for three-per-hour when estimating API rate limits or costs over a full day (72 runs) or month.

Best Practices

  • A solid middle-ground interval when every 15 minutes feels too frequent and every 30 minutes feels too sparse — common for polling jobs with a moderate freshness requirement.
  • Restrict to business hours (9-17) if the job supports a feature nobody needs monitored overnight, cutting the daily run count roughly in half.
  • Pair with basic alerting if a missed run matters — a gap noticeably longer than 20 minutes between runs is easy to detect and usually indicates a stuck or failed job.

Frequently Asked Questions

Does */20 * * * * really run every 20 minutes evenly?
Yes — since 20 divides evenly into 60, the step value produces a genuinely consistent rolling interval: :00, :20, :40 every hour, with no drift or uneven gaps.
How is */20 different from */45?
20 divides 60 evenly (three equal 20-minute slices), while 45 doesn't (60 ÷ 45 leaves a remainder), so */45 only fires at :00 and :45 — an uneven 45/15-minute alternating gap rather than a true rolling interval. */20 doesn't have this problem.
What's a good use case for every 20 minutes?
Moderate-frequency polling or sync jobs — checking a queue, refreshing a semi-live dashboard, or syncing external data — where every 15 minutes is unnecessarily frequent but every 30 minutes feels too stale.