Cron Expression: Quarterly (First Day of Jan, Apr, Jul, Oct) (0 0 1 1,4,7,10 *)
Need to generate a cron expression?
Use CronOS to generate any cron expression you wish with natural language. Simply describe what you need, and we'll create the perfect cron expression for you. It's completely free!
Cron Expression: Quarterly (First Day of Jan, Apr, Jul, Oct) (0 0 1 1,4,7,10 *)
The cron expression 0 0 1 1,4,7,10 * executes a task quarterly on the first day of January, April, July, and October at midnight (00:00), making it ideal for quarterly reports, billing cycles, and business operations.
Expression Breakdown
0 0 1 1,4,7,10 *
│ │ │ │ │
│ │ │ │ └─── Day of week: * (every day)
│ │ │ └─────────── Month: 1,4,7,10 (Jan, Apr, Jul, Oct)
│ │ └───────────── Day of month: 1 (first day)
│ └─────────────── Hour: 0 (at hour 0, midnight)
└───────────────── Minute: 0 (at minute 0)
Field Values
| Field | Value | Meaning |
|---|---|---|
| Minute | 0 | At minute 0 |
| Hour | 0 | At hour 0 (midnight) |
| Day of Month | 1 | First day |
| Month | 1,4,7,10 | January, April, July, October |
| Day of Week | * | Every day of week (0-7) |
List Syntax
The 1,4,7,10 in the month field is a list that means "January, April, July, and October":
- Runs on: January 1st, April 1st, July 1st, October 1st at midnight
- These are the first days of Q1, Q2, Q3, and Q4
Execution Time
This expression runs 4 times per year at:
- January 1st 00:00, April 1st 00:00, July 1st 00:00, October 1st 00:00
Common Use Cases
1. Quarterly Reports
0 0 1 1,4,7,10 * /usr/bin/python3 /scripts/generate-quarterly-report.py
Generate quarterly business reports or summaries.
2. Quarterly Billing
0 0 1 1,4,7,10 * /usr/bin/python3 /scripts/process-quarterly-billing.py
Process quarterly billing cycles or invoices.
3. Quarterly Backups
0 0 1 1,4,7,10 * /usr/local/bin/quarterly-backup.sh
Create full quarterly backups or archives.
4. Quarterly Maintenance
0 0 1 1,4,7,10 * /usr/local/bin/quarterly-maintenance.sh
Run quarterly system maintenance, cleanup, or optimization.
Example Implementations
Quarterly Report Script
# generate-quarterly-report.py
import json
from datetime import datetime, timedelta
import sqlite3
def generate_quarterly_report():
conn = sqlite3.connect('/var/data/app.db')
cursor = conn.cursor()
# Determine current quarter
today = datetime.now()
current_month = today.month
if current_month in [1, 2, 3]:
quarter = 1
quarter_start = datetime(today.year, 1, 1)
quarter_end = datetime(today.year, 3, 31)
elif current_month in [4, 5, 6]:
quarter = 2
quarter_start = datetime(today.year, 4, 1)
quarter_end = datetime(today.year, 6, 30)
elif current_month in [7, 8, 9]:
quarter = 3
quarter_start = datetime(today.year, 7, 1)
quarter_end = datetime(today.year, 9, 30)
else:
quarter = 4
quarter_start = datetime(today.year, 10, 1)
quarter_end = datetime(today.year, 12, 31)
# Get previous quarter data
previous_quarter_start = quarter_start - timedelta(days=90)
previous_quarter_end = quarter_start - timedelta(days=1)
cursor.execute('''
SELECT
COUNT(*) as total_transactions,
SUM(amount) as total_revenue,
COUNT(DISTINCT user_id) as unique_customers
FROM transactions
WHERE created_at >= ? AND created_at <= ?
''', (previous_quarter_start, previous_quarter_end))
metrics = cursor.fetchone()
report = {
'quarter': f"Q{quarter}",
'year': today.year,
'quarter_start': previous_quarter_start.strftime('%Y-%m-%d'),
'quarter_end': previous_quarter_end.strftime('%Y-%m-%d'),
'metrics': {
'total_transactions': metrics[0],
'total_revenue': round(metrics[1], 2) if metrics[1] else 0,
'unique_customers': metrics[2]
}
}
with open(f'/var/reports/quarterly_{today.year}_Q{quarter}.json', 'w') as f:
json.dump(report, f, indent=2)
print(f"{datetime.now()}: Quarterly report generated")
conn.close()
if __name__ == '__main__':
generate_quarterly_report()
Best Practices
- Quarter Boundaries: First day of quarter marks a clean business cycle
- Error Handling: Implement comprehensive error handling and logging
- Locking: Use file locks to prevent concurrent execution
- Monitoring: Set up alerts for failed quarterly jobs
- Resource Management: Quarterly jobs may be heavy, monitor resources
When to Use
✅ Good for:
- Quarterly reports
- Quarterly billing
- Quarterly backups
- Quarterly maintenance
- Business quarter operations
❌ Avoid for:
- Tasks requiring more frequent execution
- Real-time critical operations
Related Patterns
| Pattern | Expression | Description |
|---|---|---|
| Quarterly | 0 0 1 1,4,7,10 * | First day of each quarter |
| Every 6 months | 0 0 1 1,7 * | January and July |
| Yearly | 0 0 1 1 * | January 1st only |
Conclusion
The 0 0 1 1,4,7,10 * expression is perfect for quarterly operations. It's commonly used for quarterly reports, billing cycles, and maintenance tasks, providing a clean quarterly cycle aligned with business operations and financial reporting periods.
Need to generate a cron expression?
Use CronOS to generate any cron expression you wish with natural language. Simply describe what you need, and we'll create the perfect cron expression for you. It's completely free!