Cron Every 2 Weeks
A true 14-day cycle cannot be written in standard cron, because the day-of-month field resets each month and months are not multiples of 14 days. Avoid */14 in day-of-month — it resets to the 1st each month (giving 1, 15, 29) rather than a continuous 14-day cadence. The common approximation is the 1st and 15th; for an exact 14-day cycle, gate a daily job with a date check.
Cron Expression
0 0 1,15 * *Field Breakdown
| Field | Value | Meaning |
|---|---|---|
| Minute | 0 | At minute 0 |
| Hour | 0 | At midnight (00:00) |
| Day of Month | 1,15 | Approximate biweekly — twice a month |
| Month | * | Every month (1-12) |
| Day of Week | * | Any day of the week |
Variations
0 0 1,15 * *Approximate biweekly — the 1st and 15th of each month0 0 * * 1 [ $(( $(date +\%s) / 86400 \% 14 )) -eq 0 ] && /path/to/jobExact every-14-days: a weekly job gated by a day-count checkCommon Use Cases
- Biweekly payroll or payouts
- Every-other-week newsletters
- Sprint-cadence reports (two-week sprints)
Tips & Best Practices
Do not use */14 in the day-of-month field — it does not produce a continuous 14-day interval.
The 1st-and-15th approximation is good enough for most biweekly needs.
For an exact cycle, gate a job by epoch-day modulo 14, or use systemd timers / an application scheduler.