Linux cron

0 9 1-7 * 1

Quartz cron

0 0 9 1-7 * 1

What this schedule does

0 9 1-7 * 1 runs at 09:00 on mondays that fall on days 1 through 7. 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 9 1-7 * 1, 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

FieldValueMeaningPractical note
Minute0Minute field is 0.Specific minute: 0.
Hour9Hour field is 9.Specific hour: 9.
Day of month1-7Day-of-month field is 1-7.Range of day of month values: 1-7.
Month*Month field is *.Every valid month.
Day of week1Day-of-week field is 1.Specific day of week: 1.

Field reference

Read 0 9 1-7 * 1 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.

FieldAllowed valuesCommon syntaxImplementation note
Minute0-59*, comma lists, ranges, and stepsUse small intervals only for lightweight or locked jobs.
Hour0-2324-hour UTC or scheduler-local valuesCheck whether the platform evaluates in UTC before copying the schedule.
Day of month1-31Exact days, ranges, steps, or *Month length can skip impossible dates such as the 31st in shorter months.
Month1-12 or JAN-DECNumeric or named months where supportedNamed months are convenient but not accepted by every parser.
Day of week0-7 or SUN-SAT0 and 7 usually both mean SundaySome schedulers combine day-of-month and day-of-week differently.

Next 10 UTC run times

#UTC timeISO 8601Relative
1Mon, 03 Aug 2026 09:00:00 GMT2026-08-03T09:00:00.000Zin 2 days 23 hr
2Mon, 07 Sep 2026 09:00:00 GMT2026-09-07T09:00:00.000Zin 37 days 23 hr
3Mon, 05 Oct 2026 09:00:00 GMT2026-10-05T09:00:00.000Zin 65 days 23 hr
4Mon, 02 Nov 2026 09:00:00 GMT2026-11-02T09:00:00.000Zin 93 days 23 hr
5Mon, 07 Dec 2026 09:00:00 GMT2026-12-07T09:00:00.000Zin 128 days 23 hr
6Mon, 04 Jan 2027 09:00:00 GMT2027-01-04T09:00:00.000Zin 156 days 23 hr
7Mon, 01 Feb 2027 09:00:00 GMT2027-02-01T09:00:00.000Zin 184 days 23 hr
8Mon, 01 Mar 2027 09:00:00 GMT2027-03-01T09:00:00.000Zin 212 days 23 hr
9Mon, 05 Apr 2027 09:00:00 GMT2027-04-05T09:00:00.000Zin 247 days 23 hr
10Mon, 03 May 2027 09:00:00 GMT2027-05-03T09:00:00.000Zin 275 days 23 hr

Linux crontab

0 9 1-7 * 1 /usr/local/bin/job.sh

GitHub Actions

on:
  schedule:
    - cron: "0 9 1-7 * 1"

Kubernetes CronJob

apiVersion: batch/v1
kind: CronJob
spec:
  schedule: "0 9 1-7 * 1"
  jobTemplate:
    spec:
      template:
        spec:
          restartPolicy: OnFailure

Jenkins Pipeline

pipeline {
  triggers { cron('0 9 1-7 * 1') }
}

AWS EventBridge note

EventBridge schedule expression:
cron(0 9 1-7 * 1 *)

Node.js node-cron

import cron from "node-cron";

cron.schedule("0 9 1-7 * 1", 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 9 1-7 * 1"))
scheduler.start()

Go robfig/cron

import "github.com/robfig/cron/v3"

c := cron.New(cron.WithLocation(time.UTC))
c.AddFunc("0 9 1-7 * 1", runJob)
c.Start()

Spring scheduled job

@Scheduled(cron = "0 0 9 1-7 * 1", zone = "UTC")
public void runJob() {
    // keep this method idempotent
}

Good use cases

  • Run weekly summaries, digest emails, cleanup tasks, or maintenance checks.
  • Place expensive jobs during low-traffic windows and verify the timezone.
  • Use idempotent job logic so retrying a missed weekly run does not duplicate work.

Production checklist

CheckWhy it matters
TimezoneConfirm whether the scheduler uses UTC, server local time, or an explicit timezone setting.
OverlapMake the job idempotent or add a lock if one run can last longer than the interval.
RetriesCron starts jobs; it does not define retry, backoff, alerting, or dead-letter behavior.
Platform syntaxThis is standard five-field cron syntax for Linux-style schedulers.
MonitoringLog 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.

DecisionRecommended defaultReason
TimezoneUse UTC unless the job is tied to a local business day.UTC avoids daylight-saving surprises and makes logs easier to compare.
ConcurrencyAllow only one active run for state-changing jobs.Overlapping runs can duplicate emails, invoices, imports, or cleanup work.
Missed startsRecord the intended scheduled time and decide whether to catch up.Some platforms skip missed runs while others start late after downtime.
RetriesUse application-level retries with bounded backoff.Cron only triggers the job; it does not know whether the work completed correctly.

Platform differences

PlatformTypical formatImportant behavior
Linux crontab0 9 1-7 * 1Five fields. Usually runs in the server timezone unless the environment or cron implementation sets another timezone.
GitHub Actions0 9 1-7 * 1Uses five-field cron and evaluates schedules in UTC. Jobs may be delayed during high load.
Kubernetes CronJob0 9 1-7 * 1Controller behavior controls missed starts, concurrency policy, history limits, and timezone support.
Quartz / Spring0 0 9 1-7 * 1Often uses seconds and supports ?, L, and other non-Linux cron features.

Usage notes

First Monday Window 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.