Cron expression for Every quarter
0 0 1 1,4,7,10 *
Runs at 00:00 on the first day of January, April, July and October.
Next 5 runs (your local time)
These are shown in your browser’s timezone. The job itself runs in the scheduler’s timezone — often UTC — so the real run time can differ.
What people actually schedule with 0 0 1 1,4,7,10 *
- Quarterly financial closes and board-report data pulls
- Rotating long-lived credentials and API keys on a fixed cadence
- Quarterly OKR kickoff automation and review reminders
Use 0 0 1 1,4,7,10 * on your platform
It’s the same 5-field expression everywhere — what changes is where you put it and which timezone it runs in.
Linux / crontab
0 0 1 1,4,7,10 * /path/to/your-command
Runs in the server’s local timezone — check it with timedatectl.
Full field reference: crontab(5) man page.
GitHub Actions
on:
schedule:
- cron: "0 0 1 1,4,7,10 *"
GitHub Actions always runs scheduled jobs in UTC — there is no timezone setting, and runs can be delayed under load (official docs).
Kubernetes CronJob
spec:
schedule: "0 0 1 1,4,7,10 *"
Defaults to UTC. Set spec.timeZone (Kubernetes 1.27+)
for a specific zone — see the
CronJob docs.
Quartz / Spring @Scheduled
Quartz uses 6 fields (seconds first): 0 0 0 1 1,4,7,10 *. Watch out:
Quartz day-of-week is 1=SUN … 7=SAT (not 0–6), and day-of-month /
day-of-week use ? — double-check if your schedule touches those fields
(Quartz cron reference).
Gotchas with every quarter schedules
1,4,7,10is calendar quarters. Plenty of companies close on Feb/May/Aug/Nov or Apr/Jul/Oct/Jan — shift the month list to match finance, not the Gregorian default.- The January 1st run coincides with every annual job you own — if both exist, stagger the hours so the year-end close isn’t fighting the year-reset for the database.
- Dec 31 events are still settling at midnight on Jan 1. Accounting closes run days after the boundary for a reason — your automated “quarter close” should snapshot, not finalize.
Will you know if this job silently fails?
Cron jobs fail quietly — a server reboots, a path changes, or an error code is ignored — and nobody notices until the data is missing. A cron monitor (a dead-man’s-switch) alerts you when a scheduled job does not check in on time.
Monitor your cron jobs with UptimeRobot →
Disclosure: this is an affiliate link — we may earn a commission if you sign up, at no extra cost to you.
Is 0 0 1 1,4,7,10 * the right schedule?
Monthly granularity lives at the 1st of every month; the once-a-year edge case is every year — prefer one quarterly job with a year-end branch over two overlapping jobs.
Or use the interactive cron generator & explainer, read the complete cron syntax guide, or pick another common schedule: