Crontab 1st and 15th of Month (0 0 1,15 * *)
Run a cron job on the 1st and 15th of every month at midnight. Commonly used for semi-monthly payroll and billing cycles.
Detailed Explanation
Running a Cron Job Twice a Month
The expression 0 0 1,15 * * uses a comma-separated list in the day-of-month field to schedule a job on two specific days: the 1st and the 15th of every month at midnight.
Field Breakdown
| Field | Value | Meaning |
|---|---|---|
| Minute | 0 | At minute 0 |
| Hour | 0 | At midnight |
| Day of Month | 1,15 | On the 1st and 15th |
| Month | * | Every month |
| Day of Week | * | Any day of the week |
Semi-Monthly Scheduling
Semi-monthly (twice per month) schedules are distinct from bi-weekly (every two weeks) schedules. Semi-monthly always falls on fixed calendar dates, while bi-weekly is every 14 days regardless of the date.
Common Semi-Monthly Patterns
# Payroll processing (1st and 15th at 6 AM)
0 6 1,15 * * /scripts/process-payroll.sh
# Billing cycle (1st and 15th)
0 0 1,15 * * /scripts/generate-invoices.sh
# Semi-monthly report
0 9 1,15 * * /scripts/send-report.sh
Multiple Days
You can list any number of specific days:
0 0 1,10,20 * *— Three times a month0 0 5,15,25 * *— Every 10 days (approximately)
Use Case
Semi-monthly scheduling is standard for payroll processing, semi-monthly billing cycles, insurance premium calculations, rent payment reminders, mid-month and end-of-month data reconciliation, and compliance reporting.