ClockOrbit

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.

Next runs
valid
Upcoming runs
Fri, Jan 1 2027
00:00 UTC
in 55 days
Thu, Jul 1 2027
00:00 UTC
in 236 days
Sat, Jan 1 2028
00:00 UTC
in 420 days
Sat, Jul 1 2028
00:00 UTC
in 602 days
Mon, Jan 1 2029
00:00 UTC
in 786 days
Sun, Jul 1 2029
00:00 UTC
in 967 days
Tue, Jan 1 2030
00:00 UTC
in 1151 days
Mon, Jul 1 2030
00:00 UTC
in 1332 days

What 0 0 1 1,7 * means

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.

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.

Field-by-field breakdown

Unix cron has five fields. Here is what each one is doing in this expression:

FieldValueMeaning
Minute0minute = 0
Hour0hour = 0
Day of month1day-of-month = 1
Month1,7the specific values 1,7 of month
Day of week*every day-of-week

Every 6 months in every scheduler

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.

SchedulerExpressionCopy
Unix / crontab0 0 1 1,7 *
GitHub Actions0 0 1 1,7 *
Kubernetes CronJob0 0 1 1,7 *
Vercel Cron0 0 1 1,7 *
Quartz0 0 0 1 1,7 ? *
Spring0 0 0 1 1,7 ?
AWS EventBridge0 0 1 1,7 ? *

When you would use 0 0 1 1,7 *

The gotcha worth knowing

*/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.

People also search for

cron every 6 monthscron twice a yearcrontab semi annualcron biannual job

0 0 1 1,7 * FAQ

What does the cron expression 0 0 1 1,7 * mean?

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.

How do I write "every 6 months" in GitHub Actions?

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.

How do I write "every 6 months" for AWS EventBridge?

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.

What is the Quartz equivalent of 0 0 1 1,7 *?

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.

Related cron patterns

More cron tools

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.