HTTPfy

Every day at 2am

At 02:00 every day: once a day in the small hours.

365runs in the next 365 days
7runs per week
1 daybetween every run
02:00next run, Thu 12 Nov UTC

What it is used for

The classic maintenance window: backups, VACUUM/ANALYZE, index rebuilds and other heavy jobs while traffic is lowest.

Field by field

FieldValueMatches
Minute00
Hour22
Day of month*every value
Month*every value
Day of week*every value
0 2 * * * /path/to/job

Next 10 run times

Computed when this page loaded (2026-11-11 02:24 UTC), assuming the scheduler runs in UTC.

#UTCYour local time
1Thu 2026-11-12 02:00
2Fri 2026-11-13 02:00
3Sat 2026-11-14 02:00
4Sun 2026-11-15 02:00
5Mon 2026-11-16 02:00
6Tue 2026-11-17 02:00
7Wed 2026-11-18 02:00
8Thu 2026-11-19 02:00
9Fri 2026-11-20 02:00
10Sat 2026-11-21 02:00

Things to watch with this schedule

  • 02:00 is exactly where many time zones change clocks for daylight saving. In the US and Central Europe, 02:00-02:59 does not exist on the spring-forward day, and in Central Europe it happens twice on the autumn change day. Vixie and cronie handle the gap by running the job once at the shifted time, but behaviour differs between cron implementations, and Kubernetes or other schedulers may skip it. Running the server in UTC avoids the problem completely.

Kubernetes CronJob

Kubernetes uses the same five fields. Set spec.timeZone (stable since Kubernetes 1.27), otherwise the schedule follows the time zone of kube-controller-manager.

apiVersion: batch/v1
kind: CronJob
metadata:
  name: every-day-at-2am
spec:
  schedule: "0 2 * * *"
  timeZone: "Etc/UTC"
  concurrencyPolicy: Forbid
  startingDeadlineSeconds: 300
  jobTemplate:
    spec:
      template:
        spec:
          restartPolicy: OnFailure
          containers:
            - name: job
              image: debian:bookworm-slim
              command: ["/bin/sh", "-c", "/app/run-job.sh"]

GitHub Actions

Workflow schedules use five-field cron in UTC and run only from the default branch. Runs at minute 0 are the most likely to be delayed or dropped when GitHub is busy; an odd minute such as 7 or 23 starts more reliably.

on:
  schedule:
    - cron: '0 2 * * *'   # UTC

jobs:
  run:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: ./run-job.sh

systemd timer

The equivalent OnCalendar= value is *-*-* 02:00:00. Check it with systemd-analyze calendar '*-*-* 02:00:00', which prints the next elapse time. Persistent=true runs a missed job after downtime, which classic cron never does.

[Unit]
Description=Every day at 2am

[Timer]
OnCalendar=*-*-* 02:00:00
Persistent=true

[Install]
WantedBy=timers.target

AWS EventBridge

EventBridge rules take six fields (minute, hour, day-of-month, month, day-of-week, year) in UTC; EventBridge Scheduler can use a time zone. One of day-of-month and day-of-week must be ?, and day-of-week runs 1-7 from Sunday, so names are used here.

cron(0 2 * * ? *)

Quartz Scheduler (Java)

Quartz adds a leading seconds field and needs ? in either day field; days of the week are 1 (SUN) to 7 (SAT).

0 0 2 * * ?

Spring's @Scheduled(cron = ...) also uses six fields, but numbers days of the week 0-7 with Sunday as 0 or 7, like Unix cron; the names shown above work in both.

Related schedules