Cron expression for every 6 months (jan 1 and jul 1)
0 0 1 */6 * In plain English
At 00:00, on day 1 of the month, every 6 months
Next runs
Field by field
| Field | Allowed | This expression |
|---|---|---|
| Minute | 0–59 | 0 |
| Hour | 0–23 | 0 |
| Day of month | 1–31 | 1 |
| Month | 1–12 | */6 |
| Day of week | 0–6 (Sun–Sat) | * |
Use it
In a crontab
Run crontab -e and add:
0 0 1 */6 * /path/to/your-script.sh Remember: system cron won't tell you when this job fails or silently stops running. If the schedule matters, add a heartbeat monitor so you get an alert when a run goes missing.
Monitored, with one extra line
Keep the job exactly where it runs today — just append a ping, and SteadyCron alerts you when a run doesn't arrive on schedule:
0 0 1 */6 * /path/to/your-script.sh && curl -fsS https://ping.steadycron.com/<token> Works from any language, shell, container, or CI — anything that can make an HTTP request. How heartbeat monitoring works →
As code, with SteadyCron
Define the schedule in a YAML manifest, review it in a pull request, and let SteadyCron call your endpoint — with retries, timeouts, and an execution log:
jobs:
- id: my-job
name: my-job
kind: http
method: POST
url: https://api.example.com/tasks/run
schedule: "0 0 1 */6 *"
timezone: Europe/Berlin
retries: 3
Then steadycron sync steadycron.yaml — or manage the same job with the
Terraform provider.
Related expressions
- Every month (1st at midnight)
0 0 1 * * - Every month on the 15th
0 0 15 * * - Twice a month (1st and 15th)
0 0 1,15 * * - Every quarter (1st day at midnight)
0 0 1 */3 * - Every minute
* * * * * - Every 2 minutes
*/2 * * * * - Every 3 minutes
*/3 * * * * - Every 4 minutes
*/4 * * * *
Need something else? Try the cron generator or browse all common cron expressions.
Schedule set up — but not running?
A correct expression is only half the job. Fix-first guides for the usual suspects: