Cron Schedule Library — 37 Ready-Made Expressions
Every entry here is a five-field expression with the trigger counts worked out against a real calendar year: how many times it fires on a matching day, how many days a year match, and the yearly total. Copy the expression, or open the page for the field-by-field reading and paste-ready crontab, Kubernetes and GitHub Actions blocks.
| Schedule | Expression | Runs / day | Days / year | Runs / year |
|---|---|---|---|---|
| every minute | * * * * * | 1,440 | 365 | 525,600 |
| every 2 minutes | */2 * * * * | 720 | 365 | 262,800 |
| every 5 minutes | */5 * * * * | 288 | 365 | 105,120 |
| every 10 minutes | */10 * * * * | 144 | 365 | 52,560 |
| every 15 minutes | */15 * * * * | 96 | 365 | 35,040 |
| every 20 minutes | */20 * * * * | 72 | 365 | 26,280 |
| every 30 minutes | */30 * * * * | 48 | 365 | 17,520 |
| every hour | 0 * * * * | 24 | 365 | 8,760 |
| every 2 hours | 0 */2 * * * | 12 | 365 | 4,380 |
| every 4 hours | 0 */4 * * * | 6 | 365 | 2,190 |
| every 6 hours | 0 */6 * * * | 4 | 365 | 1,460 |
| every 8 hours | 0 */8 * * * | 3 | 365 | 1,095 |
| every 12 hours | 0 */12 * * * | 2 | 365 | 730 |
| at :15 and :45 | 15,45 * * * * | 48 | 365 | 17,520 |
| every 5 minutes from :02 | 2-59/5 * * * * | 288 | 365 | 105,120 |
| daily at midnight | 0 0 * * * | 1 | 365 | 365 |
| daily at 2:00 | 0 2 * * * | 1 | 365 | 365 |
| daily at 3:00 | 0 3 * * * | 1 | 365 | 365 |
| daily at 6:00 | 0 6 * * * | 1 | 365 | 365 |
| daily at noon | 0 12 * * * | 1 | 365 | 365 |
| daily at 18:00 | 0 18 * * * | 1 | 365 | 365 |
| at 06:00 and 18:00 | 0 6,18 * * * | 2 | 365 | 730 |
| weekdays at 8:00 | 0 8 * * 1-5 | 1 | 261 | 261 |
| weekdays at 9:00 | 0 9 * * 1-5 | 1 | 261 | 261 |
| weekdays at 17:00 | 0 17 * * 1-5 | 1 | 261 | 261 |
| hourly, 09:00–17:00 on weekdays | 0 9-17 * * 1-5 | 9 | 261 | 2,349 |
| every 15 minutes, 09:00–17:00 weekdays | */15 9-17 * * 1-5 | 36 | 261 | 9,396 |
| every 30 minutes, 09:00–17:00 weekdays | */30 9-17 * * 1-5 | 18 | 261 | 4,698 |
| Sundays at midnight | 0 0 * * 0 | 1 | 52 | 52 |
| Mondays at 9:00 | 0 9 * * 1 | 1 | 52 | 52 |
| Fridays at 17:00 | 0 17 * * 5 | 1 | 53 | 53 |
| weekends at noon | 0 12 * * 6,0 | 1 | 104 | 104 |
| the 1st of every month, at midnight | 0 0 1 * * | 1 | 12 | 12 |
| the 15th of every month at 06:00 | 0 6 15 * * | 1 | 12 | 12 |
| the 1st of January, April, July and October | 0 0 1 1,4,7,10 * | 1 | 4 | 4 |
| the 1st of every third month | 0 0 1 */3 * | 1 | 4 | 4 |
| January 1st at midnight | 0 0 1 1 * | 1 | 1 | 1 |
Counts assume the standard Vixie/cronie five-field syntax. Seconds are not supported: a sixth field belongs to Quartz, and expressions copied from Quartz will fail in crontab.
How the counts are derived
Each expression is parsed into a bit set per field. The number of trigger points in a day is the size of the minute set multiplied by the size of the hour set; the number of matching days comes from walking every date of a non-leap year against the month, day-of-month and weekday sets. When both day fields are restricted, the union is used, because that is what cron actually does — a detail that trips up most hand-written monthly-plus-weekly schedules.