0 8 * * 1-5
0 0 8 * * 1-5
What this schedule does
0 8 * * 1-5 runs at 08:00 monday through friday. In standard Linux cron, the five fields are minute, hour, day of month, month, and day of week. The equivalent Quartz-style expression is 0 0 8 * * 1-5, which usually adds a seconds field at the beginning.
Treat the expression as a trigger, not as a complete job policy. Timezone, retries, locking, alerting, and missed-run behavior are controlled by the scheduler or by your application code.
Field breakdown
| Field | Value | Meaning | Practical note |
|---|---|---|---|
| Minute | 0 | Minute field is 0. | Specific minute: 0. |
| Hour | 8 | Hour field is 8. | Specific hour: 8. |
| Day of month | * | Day-of-month field is *. | Every valid day of month. |
| Month | * | Month field is *. | Every valid month. |
| Day of week | 1-5 | Day-of-week field is 1-5. | Range of day of week values: 1-5. |
Field reference
Read 0 8 * * 1-5 from left to right as minute, hour, day of month, month, and day of week. A value of * means every valid value, */n means every n units, commas select multiple values, and ranges select a continuous span.
| Field | Allowed values | Common syntax | Implementation note |
|---|---|---|---|
| Minute | 0-59 | *, comma lists, ranges, and steps | Use small intervals only for lightweight or locked jobs. |
| Hour | 0-23 | 24-hour UTC or scheduler-local values | Check whether the platform evaluates in UTC before copying the schedule. |
| Day of month | 1-31 | Exact days, ranges, steps, or * | Month length can skip impossible dates such as the 31st in shorter months. |
| Month | 1-12 or JAN-DEC | Numeric or named months where supported | Named months are convenient but not accepted by every parser. |
| Day of week | 0-7 or SUN-SAT | 0 and 7 usually both mean Sunday | Some schedulers combine day-of-month and day-of-week differently. |
Next 10 UTC run times
| # | UTC time | ISO 8601 | Relative |
|---|---|---|---|
| 1 | Mon, 03 Aug 2026 08:00:00 GMT | 2026-08-03T08:00:00.000Z | in 2 days 22 hr |
| 2 | Tue, 04 Aug 2026 08:00:00 GMT | 2026-08-04T08:00:00.000Z | in 3 days 22 hr |
| 3 | Wed, 05 Aug 2026 08:00:00 GMT | 2026-08-05T08:00:00.000Z | in 4 days 22 hr |
| 4 | Thu, 06 Aug 2026 08:00:00 GMT | 2026-08-06T08:00:00.000Z | in 5 days 22 hr |
| 5 | Fri, 07 Aug 2026 08:00:00 GMT | 2026-08-07T08:00:00.000Z | in 6 days 22 hr |
| 6 | Mon, 10 Aug 2026 08:00:00 GMT | 2026-08-10T08:00:00.000Z | in 9 days 22 hr |
| 7 | Tue, 11 Aug 2026 08:00:00 GMT | 2026-08-11T08:00:00.000Z | in 10 days 22 hr |
| 8 | Wed, 12 Aug 2026 08:00:00 GMT | 2026-08-12T08:00:00.000Z | in 11 days 22 hr |
| 9 | Thu, 13 Aug 2026 08:00:00 GMT | 2026-08-13T08:00:00.000Z | in 12 days 22 hr |
| 10 | Fri, 14 Aug 2026 08:00:00 GMT | 2026-08-14T08:00:00.000Z | in 13 days 22 hr |
Linux crontab
0 8 * * 1-5 /usr/local/bin/job.shGitHub Actions
on:
schedule:
- cron: "0 8 * * 1-5"Kubernetes CronJob
apiVersion: batch/v1
kind: CronJob
spec:
schedule: "0 8 * * 1-5"
jobTemplate:
spec:
template:
spec:
restartPolicy: OnFailureJenkins Pipeline
pipeline {
triggers { cron('0 8 * * 1-5') }
}AWS EventBridge note
EventBridge schedule expression:
cron(0 8 ? * 1-5 *)Node.js node-cron
import cron from "node-cron";
cron.schedule("0 8 * * 1-5", async () => {
await runJob();
}, { timezone: "UTC" });Python APScheduler
from apscheduler.triggers.cron import CronTrigger
from apscheduler.schedulers.background import BackgroundScheduler
scheduler = BackgroundScheduler(timezone="UTC")
scheduler.add_job(run_job, CronTrigger.from_crontab("0 8 * * 1-5"))
scheduler.start()Go robfig/cron
import "github.com/robfig/cron/v3"
c := cron.New(cron.WithLocation(time.UTC))
c.AddFunc("0 8 * * 1-5", runJob)
c.Start()Spring scheduled job
@Scheduled(cron = "0 0 8 * * 1-5", zone = "UTC")
public void runJob() {
// keep this method idempotent
}Good use cases
- Poll a lightweight queue or status endpoint when webhook delivery is not available.
- Refresh cached metrics, dashboards, or search indexes that tolerate short delays.
- Run small reconciliation jobs, but keep each execution shorter than the interval to avoid overlap.
Production checklist
| Check | Why it matters |
|---|---|
| Timezone | Confirm whether the scheduler uses UTC, server local time, or an explicit timezone setting. |
| Overlap | Make the job idempotent or add a lock if one run can last longer than the interval. |
| Retries | Cron starts jobs; it does not define retry, backoff, alerting, or dead-letter behavior. |
| Platform syntax | This is standard five-field cron syntax for Linux-style schedulers. |
| Monitoring | Log the scheduled time, actual start time, duration, exit code, and next expected run. |
Runtime decisions
Before this schedule goes live, decide what should happen when a previous run is still active, when the server restarts during a scheduled minute, and when the job fails after partially changing data. Those rules are usually more important than the cron string itself.
| Decision | Recommended default | Reason |
|---|---|---|
| Timezone | Use UTC unless the job is tied to a local business day. | UTC avoids daylight-saving surprises and makes logs easier to compare. |
| Concurrency | Allow only one active run for state-changing jobs. | Overlapping runs can duplicate emails, invoices, imports, or cleanup work. |
| Missed starts | Record the intended scheduled time and decide whether to catch up. | Some platforms skip missed runs while others start late after downtime. |
| Retries | Use application-level retries with bounded backoff. | Cron only triggers the job; it does not know whether the work completed correctly. |
Platform differences
| Platform | Typical format | Important behavior |
|---|---|---|
| Linux crontab | 0 8 * * 1-5 | Five fields. Usually runs in the server timezone unless the environment or cron implementation sets another timezone. |
| GitHub Actions | 0 8 * * 1-5 | Uses five-field cron and evaluates schedules in UTC. Jobs may be delayed during high load. |
| Kubernetes CronJob | 0 8 * * 1-5 | Controller behavior controls missed starts, concurrency policy, history limits, and timezone support. |
| Quartz / Spring | 0 0 8 * * 1-5 | Often uses seconds and supports ?, L, and other non-Linux cron features. |
Usage notes
Weekdays at 8 AM is useful for scheduled maintenance, reporting, automation, and background jobs. Confirm the scheduler time zone and platform syntax before deploying it to production.
Platform difference: standard Linux cron uses five fields. Quartz and AWS style schedules often add seconds or year fields and use ? for “no specific value”. GitHub Actions evaluates cron in UTC. Kubernetes follows standard cron syntax through the controller timezone unless configured otherwise.
Common mistake: copying a Quartz expression into Linux crontab without removing the seconds field. Another common issue is assuming local time when the platform evaluates schedules in UTC.