Cron every day at 2 AM

The cron expression for every day at 2 AM is:

0 2 * * *

Runs once a day at 02:00.

Once a day
Standard 5-field cron

Next 10 runs

For 0 2 * * *, in the timezone you pick. Cron uses the server's timezone.

Times in UTC as of the last site update. They refresh when the page loads in a browser.

#Date and timeWhen
1Oct 30, 2026, 02:00Friday
2Oct 31, 2026, 02:00Saturday
3Nov 1, 2026, 02:00Sunday
4Nov 2, 2026, 02:00Monday
5Nov 3, 2026, 02:00Tuesday
6Nov 4, 2026, 02:00Wednesday
7Nov 5, 2026, 02:00Thursday
8Nov 6, 2026, 02:00Friday
9Nov 7, 2026, 02:00Saturday
10Nov 8, 2026, 02:00Sunday

How to read 0 2 * * *

0 2 sets minute 0 of hour 2. The last three * fields mean every day.

FieldValueMeaningAllowed
Minute0At the top of the hour0-59
Hour2At 2:00 AM0-23
Day of month*Every day of the month1-31
Month*Every month1-12 or jan-dec
Weekday*Every day of week0-7 or sun-sat

Watch out for

  • In US time zones and Central European Time, the hour from 2 AM is skipped once a year when clocks spring forward, and in Central European Time it repeats in the autumn. The cron on Debian and Ubuntu runs a job from a skipped hour soon after the change and does not run it twice in a repeated hour. Other schedulers differ, so check yours, or run the server on UTC.
  • Hours run from 0 to 23. 2 is 2 AM; 2 PM is 14.

Often used for: Nightly backups, database maintenance and other jobs that need low traffic.

Use it in

crontab

0 2 * * * /path/to/your-script.sh

Edit with crontab -e. Runs in the server's timezone.

Kubernetes CronJob

apiVersion: batch/v1
kind: CronJob
metadata:
  name: my-job
spec:
  schedule: "0 2 * * *"
  timeZone: "Etc/UTC"
  jobTemplate:
    spec:
      template:
        spec:
          restartPolicy: OnFailure
          containers:
            - name: my-job
              image: busybox:1.36
              command: ["sh", "-c", "date"]

Without timeZone, the schedule follows the timezone of the kube-controller-manager.

GitHub Actions

on:
  schedule:
    - cron: '0 2 * * *'
      timezone: "Etc/UTC"
jobs:
  run:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: ./your-script.sh

Without timezone, GitHub runs schedules in UTC. It runs them at most every 5 minutes, and a run can start late when GitHub is busy.

All cron schedules

Cron does not tell you when a job stops

Know when a job on this schedule does not run.

Your job pings Drumbeats when it finishes. If a ping does not arrive on schedule, you get an alert. No SDK, free for up to 50 monitors.

Free for up to 50 monitors · Setup in 60 seconds · No credit card required