Run a cron job weekdays at 9 AM with 0 9 * * 1-5. Monday through Friday schedule for work-day automation.
The cron expression 0 9 * * 1-5 runs at 09:00 (9 AM) Monday through Friday. The 1-5 in the day-of-week field is a range that covers Monday(1) through Friday(5), excluding Saturday(6) and Sunday(0). This produces 5 executions per week (once per weekday). This schedule is ideal for business-oriented tasks: daily standup reminders, automated report generation, data synchronization during work hours, CI/CD pipeline triggers, email summaries, and monitoring dashboards that are only relevant when the team is active. For Quartz Scheduler, use 0 9 ? * MON-FRI (use three-letter day names and ? in the day-of-month field). For AWS EventBridge, use cron(0 9 ? * MON-FRI *). For Kubernetes CronJob, use schedule: "0 9 * * 1-5" — Kubernetes supports the standard 5-field format with numeric day-of-week. Note that cron's day-of-week numbering starts with Sunday=0 (or 7), Monday=1, through Saturday=6. Some systems (like Quartz) use text labels (MON, TUE, etc.) which are more readable. If you need to include Saturday, change 1-5 to 1-6. For weekends only, use 0,6. Public holidays are not handled by cron natively. If your job should skip holidays, add a check in your script against a holiday calendar file or API.
The expression 0 9 * * 1-5 means: at minute 0, hour 9, day-of-month *, month *, day-of-week 1-5. Each field in the cron expression controls a different time component: minute, hour, day of month, month, and day of week.
Run crontab -e in your terminal to open your crontab editor. Add a new line: 0 9 * * 1-5 /path/to/your/script.sh. Save and exit. Verify with crontab -l. Make sure your script is executable (chmod +x script.sh) and uses full paths for all commands.
Quartz Scheduler: 0 9 * * 1-5. AWS EventBridge: cron(0 9 ? * 1-5 *). Kubernetes CronJob: schedule: "0 9 * * 1-5" (standard 5-field format). Each platform has slight syntax differences — use our dialect switcher above to get the exact expression.
Yes. Cron does not recognize public holidays — 1-5 means Monday through Friday regardless of holidays. To skip holidays, add logic in your script that checks against a holiday calendar file or API. Some teams maintain a /etc/holidays.d/ directory with date files.
Common pitfalls: (1) Cron uses a minimal PATH — always use full paths to commands and scripts. (2) Percent signs (%) must be escaped with backslash in crontab. (3) Cron runs in the system timezone — set CRON_TZ=UTC at the top of your crontab for consistent UTC scheduling. (4) Redirect output to prevent email spam: 0 9 * * 1-5 /path/command >> /var/log/myjob.log 2>&1. (5) Test your cron expression with crontab.guru or our validator above before deploying.
For weekends instead, use 0 9 * * 0,6. For every hour on weekdays, use 0 * * * 1-5.
The cron expression 0 9 * * 1-5 has different syntax on various scheduling platforms. Here is the equivalent expression for each:
| Platform | Expression |
|---|---|
| Unix / Linux crontab | 0 9 * * 1-5 |
| Quartz Scheduler (Java) | 0 9 ? * 1-5 |
| AWS EventBridge | cron(0 9 ? * 1-5 *) |
| Kubernetes CronJob | 0 9 * * 1-5 |
| Vercel Cron | 0 9 * * 1-5 |
| GitHub Actions | 0 9 * * 1-5 (UTC) |
Key differences across platforms: Quartz uses 7 fields starting with seconds and supports L (last) and W (weekday) modifiers. AWS EventBridge requires a 6th year field and uses ? instead of * in day fields when the other day field is specified. Kubernetes uses standard 5-field Unix cron. Vercel Cron uses the same format but schedules are defined in vercel.json. GitHub Actions uses standard cron but runs in UTC timezone only, so adjust the hour field for your local timezone offset.
Follow these tips when setting up cron jobs in production: