GitHub Actions cron
GitHub Actions scheduled workflows use POSIX cron in the on.schedule list. Every expression is evaluated in UTC — there is no timezone field. Runs can be delayed by several minutes when GitHub is busy, so do not use Actions cron as a hard SLA.
Field format
minute hour day-of-month month day-of-week (5 fields, UTC)
Gotchas
- What timezone does GitHub Actions cron use?
- UTC only. Convert your local hour before you paste the expression. A 9am India job is 3:30 UTC (or 4:30 in summer if you meant IST without DST).
- Why must the cron string be quoted?
- YAML treats * as an alias. Write cron: '0 9 * * 1' with quotes so the stars survive parsing.
- How often can a workflow run?
- The shortest practical schedule is every 5 minutes. GitHub may skip or delay scheduled jobs on free plans during peak load.
Examples
Every day at 09:00 UTC
0 9 * * *Open this scheduleWeekdays at 18:00 UTC
0 18 * * 1-5Open this scheduleEvery 15 minutes
*/15 * * * *Open this schedule
Snippet for GitHub Actions
GitHub Actions
UTC only. Quote the expression so YAML keeps the stars.
on:
schedule:
- cron: '0 9 * * 1'Kubernetes
CronJob spec.schedule. Kubernetes uses the timezone of the kube-controller-manager unless you set .spec.timeZone.
apiVersion: batch/v1
kind: CronJob
metadata:
name: job
spec:
schedule: "0 9 * * 1"
jobTemplate:
spec:
template:
spec:
restartPolicy: OnFailure
containers:
- name: job
image: busybox
args: ["echo", "run"]AWS EventBridge
Six fields: minutes hours day-of-month month day-of-week year. Use ? in either day-of-month or day-of-week.
cron(0 9 ? * 1 *)Quartz
Quartz is seconds-first (6 or 7 fields). Day-of-week names are MON, TUE, … and ? is required in one of the day fields.
0 0 9 * * 1Vercel Cron
{
"crons": [
{
"path": "/api/cron",
"schedule": "0 9 * * 1"
}
]
}crontab
0 9 * * 1 /usr/local/bin/jobnode-cron
import cron from 'node-cron';
cron.schedule('0 9 * * 1', () => {
// job
});Spring @Scheduled
Spring uses 6 fields by default (seconds first) unless you set spring.task.scheduling.cron.expression.
@Scheduled(cron = "0 0 9 * * 1")
public void run() {
// job
}