Monthly
0 0 1 1,7 *Run on the 1st of January and July at midnight.
This preview is live: the table below shows the actual next run times for 0 0 1 1,7 * in your time zone, recomputed in your browser. Change the expression, dialect, or zone to experiment, then copy the result.
0 0 1 1,7 * means0 0 1 1,7 * fires twice a year — the 1st of January and the 1st of July — by listing the two months. It is the natural cadence for semi-annual work: half-year reviews, biannual reports, or maintenance that genuinely only needs to happen twice a year.
Six-month scheduling is rare enough that it is worth a comment in your crontab explaining the intent, because future-you will not remember why a job fires in January and July when you find it months later.
Unix cron has five fields. Here is what each one is doing in this expression:
| Field | Value | Meaning |
|---|---|---|
| Minute | 0 | minute = 0 |
| Hour | 0 | hour = 0 |
| Day of month | 1 | day-of-month = 1 |
| Month | 1,7 | the specific values 1,7 of month |
| Day of week | * | every day-of-week |
The same cadence written for the seven cron dialects you are most likely to meet. Copy the line for the system you target — the field count and day-of-week numbering differ between them.
| Scheduler | Expression | Copy |
|---|---|---|
| Unix / crontab | 0 0 1 1,7 * | |
| GitHub Actions | 0 0 1 1,7 * | |
| Kubernetes CronJob | 0 0 1 1,7 * | |
| Vercel Cron | 0 0 1 1,7 * | |
| Quartz | 0 0 0 1 1,7 ? * | |
| Spring | 0 0 0 1 1,7 ? | |
| AWS EventBridge | 0 0 1 1,7 ? * |
0 0 1 1,7 **/6 in the month field gives January and July too — but month numbering starts at 1, so */6 is 1 and 7, which happens to be correct here. For other intervals the off-by-one (months are 1–12, not 0–11) trips people up.
0 0 1 1,7 * means: Run on the 1st of January and July at midnight. 0 0 1 1,7 * fires twice a year — the 1st of January and the 1st of July — by listing the two months. It is the natural cadence for semi-annual work: half-year reviews, biannual reports, or maintenance that genuinely only needs to happen twice a year.
Use 0 0 1 1,7 * in the schedule's cron field. */6 in the month field gives January and July too — but month numbering starts at 1, so */6 is 1 and 7, which happens to be correct here. For other intervals the off-by-one (months are 1–12, not 0–11) trips people up.
EventBridge uses six fields with a required year and a ? placeholder in one day field: 0 0 1 1,7 ? *. Wrap it as cron(0 0 1 1,7 ? *) in the console or CloudFormation.
Quartz is seconds-first with a trailing year, so the equivalent is 0 0 0 1 1,7 ? *. Remember Quartz numbers Sunday as 1, the opposite of Unix.
Browse the full set of cron pattern pages, or jump to the interactive tools: the cron expression builder for designing a schedule from scratch, the cron cheat sheet for a side-by-side reference, the cron timezone translator for moving a schedule between zones and dialects, and the GitHub Actions cron picker for DST-stable CI schedules.