Cron daily at 2 AM (and the daylight saving catch)
Daily at 2 AM in cron is 0 2 * * * (Unix) or 0 0 2 * * ? (Quartz, Spring), the hour DST can skip or repeat; next runs are calculated in your browser.
0 2 * * *
0 0 2 * * ?
cron(0 2 * * ? *)
Read by our parser as: At 2:00 AM, every day. Open in the cron checker
Next 10 runs
Calculating in your browser...
- 1
- 2
- 3
At a glance
- Accepts
- Nothing to enter - the schedule is preset on the page
- Outputs
- The expression in Unix, Quartz/Spring and AWS form, plus its next 10 run times
- Where it runs
- Entirely in your browser, on your device
- What leaves your device
- Nothing - what you type stays in this tab
- Limits
- Run times use your browser's timezone or UTC; real schedulers can start a run late
- Account
- Not required - there is no sign-up
- Price
- Free, with no watermark and no usage cap
- Made by
- Visrut
What it means
0 2 * * * runs once a day at 2:00 AM: minute 0, hour 2. It's a popular slot for backups because nobody is using the system. It's also the slot most likely to misbehave twice a year, because in the US, the EU and many other places daylight saving time changes happen between 1 AM and 3 AM local time.
When this is the right schedule
Use it when the scheduler runs in UTC (no DST), or you've checked how your scheduler treats skipped and repeated times and you're fine with it.
When to pick something else
Look elsewhere when the schedule uses a local timezone with DST and a missed or doubled run would hurt (a billing job, a one-a-day email). Move it to 4 AM or run it in UTC.
Things to watch
What each scheduler does on the switch nights
cronie's cron(8) says jobs in a skipped hour run right after the change and a repeated hour doesn't run them twice. AWS EventBridge Scheduler skips a time that doesn't exist and runs once in a repeated hour. GitHub Actions with a DST timezone advances a skipped time to the next valid time (its example: 2:30 runs at 3:00). Quartz's docs just warn that times around 2 AM "can cause skips or repeats".
2:00 exactly is a special case
In the US, clocks jump from 2:00 straight to 3:00, so 2:00 to 2:59 doesn't exist that night. In the EU the change is at 01:00 UTC, which is 2:00 local in Central Europe. The run list here skips times that don't exist in your timezone, so you can see it happen by checking March dates.
Run it in UTC instead
UTC has no DST. On a Linux box with cronie, CRON_TZ=UTC at the top of the crontab makes its times UTC. Kubernetes has .spec.timeZone: "Etc/UTC", and GitHub Actions is UTC by default.
Frequently asked questions
Will my 2 AM cron job run on the night the clocks go forward?
It depends on the scheduler. cronie runs it right after the change, GitHub Actions moves it to the next valid time, and AWS EventBridge Scheduler skips it. In UTC the question never comes up.
Will it run twice when the clocks go back?
Not on cronie or AWS EventBridge Scheduler, which both document running once. Other schedulers vary, so make the job safe to run twice if it matters.