★ Cron cheat sheet
Cron Expression: Every Quarter
Midnight on the first day of January, April, July and October: calendar quarters.
- Runs in your browser
- No signup
The expression
0 0 1 1,4,7,10 *
At 00:00 on day-of-month 1 in January, April, July and October.
- 0Minute
- 0Hour
- 1Day of month
- 1,4,7,10Month
- *Day of week
✓ Valid 5-field cron
Quick picks
Typing by hand. Pick a pattern above to build one with inputs instead.
In plain English
At 00:00 on day-of-month 1 in January, April, July and October.
Next 10 runs
Paste it into your platform
Time zone: UTC
0 0 1 1,4,7,10 * /usr/local/bin/my-job >> /var/log/my-job.log 2>&1
- OKRuns in the server’s local time zone. cronie (RHEL, Fedora) accepts a CRON_TZ= line above the job; Debian’s cron does not.
- Heads-upEscape % as \% in the command: an unescaped % ends the command and starts stdin.
- Heads-upcron runs with a minimal PATH and no login shell. Use absolute paths and redirect output, or failures disappear.
- Linux crontab docs ↗
Cron jobs failing silently?
I build background job systems with retries, alerting and dashboards, so you hear about failures before your customers do.
What 0 0 1 1,4,7,10 * means
Field by field:
| Field | Value | Matches |
|---|---|---|
| Minute | 0 | 0 |
| Hour | 0 | 0 |
| Day of month | 1 | 1 |
| Month | 1,4,7,10 | January, April, July, October |
| Day of week | * | any |
Gotchas
- For fiscal quarters that start in another month, shift the month list, e.g. 4,7,10,1 for an April year.
- */3 in the month field gives 1,4,7,10 too, because months start at 1.
Does it run everywhere?
Checked against each platform's rules, assuming UTC:
| Platform | Verdict | Why |
|---|---|---|
| Linux crontab | Works, with a catch | Escape % as \% in the command: an unescaped % ends the command and starts stdin. |
| GitHub Actions | Works, with a catch | Runs at minute 0 are the most likely to be delayed or dropped under load. GitHub suggests another minute, e.g. 17. |
| Vercel | Works, with a catch | Vercel now labels Cron Jobs “legacy” in favour of Vercel Schedules, which add time zones. Existing crons keep working. |
| AWS EventBridge | Works | Six fields: the year is added at the end, and one of day-of-month / day-of-week must be ?. |
| Kubernetes | Works, with a catch | Without timeZone, the schedule uses the kube-controller-manager’s local zone. TZ= or CRON_TZ= inside schedule is rejected from v1.29. |
Questions engineers actually ask
What is the cron for every quarter?
How do I run at the end of each quarter instead?
Why does my job run on days I didn't expect?
What time zone does cron use?
Other schedules
- Every Minute
* * * * * - Every 2 Minutes
*/2 * * * * - Every 5 Minutes
*/5 * * * * - Every 10 Minutes
*/10 * * * * - Every 15 Minutes
*/15 * * * * - Every 30 Minutes
*/30 * * * * - Every Hour
0 * * * * - Every 2 Hours
0 */2 * * * - Every 3 Hours
0 */3 * * * - Every 6 Hours
0 */6 * * * - Every 12 Hours
0 */12 * * * - Twice a Day
0 9,21 * * * - Every Day at Midnight
0 0 * * * - Every Day at 9am
0 9 * * * - Every Day at Noon
0 12 * * * - Every Weekday
0 0 * * 1-5 - Every Weekday at 9am
0 9 * * 1-5 - Every Weekend
0 0 * * 6,0 - Every Monday
0 0 * * 1 - Every Friday at 5pm
0 17 * * 5 - Every Sunday at Midnight
0 0 * * 0 - Every Week
0 0 * * 0 - Every 15th of the Month
0 0 15 * * - First Day of the Month
0 0 1 * * - Last Day of the Month
0 0 28-31 * * - Every Month
0 0 1 * * - Every Year
0 0 1 1 * - Every Hour During Business Hours
0 9-17 * * 1-5 - Every 30 Minutes During Business Hours
*/30 9-17 * * 1-5
Or build your own in the cron expression builder.
More from the workbench
Fine print
Tools: on the house.
Engineer: by the hour.
Infra that doesn't page you at 3am costs a little more. I build background job systems with retries, alerting and dashboards.
I'm Himanshu, an AI and full-stack engineer. I build MVPs, AI agents and the growth plumbing around them for early-stage startups.
