Field-by-Field Breakdown of `0 0 15 * *`
| Position | Field Name | Allowed Values | Value in `0 0 15 * *` | Evaluation Meaning |
|---|---|---|---|---|
| 1 | Minute | 0 – 59 | 0 | 0 (At minute 0) |
| 2 | Hour | 0 – 23 | 0 | 0 (At midnight / 00:00) |
| 3 | Day of Month | 1 – 31 | 15 | 15 (15th day of the month) |
| 4 | Month | 1 – 12 | * | * (Every month: 1-12) |
| 5 | Day of Week | 0 – 6 (Sun-Sat) | * | * (Every day of the week: 0-6) |
Mid-Month Accounting & Billing Cadence
The 15th of the month (0 0 15 * *) is the classic mid-month trigger used across commercial software for semi-monthly payroll runs, mid-month revenue reconciliations, and quarterly estimated tax payments.
Unlike the 31st (which only exists in 7 months), day 15 exists in every single month of every calendar year, including February in leap and non-leap years. This guarantees 100% execution reliability without date-skipping anomalies.
When pairing day 15 with day 1 (semi-monthly billing), use comma notation: 0 0 1,15 * *. This executes at midnight on both the 1st and the 15th.
Common Production Scenarios for `0 0 15 * *`
Semi-Monthly Payroll Batch Processing
Executes mid-month contractor payouts and transfers salary deposits via automated ACH payment rails.
/usr/bin/node /opt/payroll/mid_month_ach.jsMid-Month Subscription Usage Invoicing
Calculates unbilled metered usage charges and generates mid-month invoice line items for high-volume enterprise accounts.
/usr/bin/php /var/www/artisan billing:invoice-meteredMid-Month Sales Tax & VAT Assessment
Runs tax liability estimates for state and European VAT obligations to prepare cash reserves before monthly filing.
/usr/bin/python3 /opt/finance/tax_estimate.pyProduction Gotchas When Running `0 0 15 * *`
- Weekend Alignment: The 15th frequently falls on a Saturday or Sunday. If banking rails are closed, ensure scripts handle deferred settlement.
- Timezone Execution: Ensure server timezone aligns with your financial accounting jurisdiction.
- Failure Alerts: Because this job runs only 12 times a year, set up redundant Slack and email alerts for any non-zero exit code.
Frequently Asked Questions About `0 0 15 * *`
How do I run a job on both the 1st and the 15th of every month?
Use comma notation in the day-of-month field: 0 0 1,15 * * /path/to/script.sh. It will run at midnight on both dates.
Does the 15th exist in February?
Yes, February has at least 28 days, so the 15th executes reliably in all 12 months of every year.
How do I run on the 15th at 6:00 PM?
Set minute to 0 and hour to 18: 0 18 15 * * /path/to/script.sh.