tooloora

Cron daily at 3 a.m. — 0 3 * * * explained

The classic maintenance window at 03:00 — quiet, uncrowded, and right next to the daylight saving switch.

Runs locally — nothing is uploaded

Examples

In plain words

At 03:00, every day.

Field by field

  • 0Minute

    at minute 0

    Matches: 0

  • 3Hour

    between 03:00 and 03:59

    Matches: 3

  • *Day of month

    on every day of the month

    Matches: 1, 2, 3, 4, 5, 6 … 31

  • *Month

    in every month

    Matches: Jan, Feb, Mar, Apr, May, Jun … Dec

  • *Day of week

    on every weekday

    Matches: Sun, Mon, Tue, Wed, Thu, Fri, Sat

Next runs

Calculating the next runs …

These times apply in the time zone configured on the server. Cron converts nothing; this preview uses your device clock.

The expression stays in your browser — it is never sent to a server.

Other expressions

0 3 * * * runs the job once a day at 03:00 in the server's local time, every day of the week. Three in the morning is the classic maintenance window: traffic is low, midnight's rush of jobs is over, and a backup that overruns by an hour still finishes before the working day starts.

Which time zone does 3 a.m. refer to?

To the server's local time, not yours. Cron reads the machine clock and never converts anything, so the same line fires at a different moment on a server in Frankfurt than on one in Virginia. Check with timedatectl or date before you assume; many teams set servers to UTC precisely so that a schedule means the same thing everywhere.

What does the daylight saving switch do to a 3 a.m. job?

In central Europe the clock jumps from 2:00 to 3:00 in spring and from 3:00 back to 2:00 in autumn, so 03:00 sits right on the edge. Jobs scheduled inside the skipped hour are the risky ones: they can be dropped or run late, depending on the implementation. A job at 4 a.m. avoids the whole question, and a server running in UTC never sees it at all.

How do I stagger several nightly jobs?

Give each one its own minute instead of stacking them on the hour: 0 3 for the database dump, 20 3 for the file sync, 45 3 for the cleanup. If a job must wait for its predecessor, chaining them in one script with && is more reliable than guessing a gap — cron has no notion of dependencies and will happily start step two while step one is still running.

How to add the expression

  1. Check the server's time zone with timedatectl, so 3 a.m. means what you think it means.
  2. Add 0 3 * * * plus the command with absolute paths and save the crontab.
  3. Give parallel nightly jobs different minutes, or chain dependent steps in one script.
  4. Log start, end and exit code — a nightly job that fails silently is discovered weeks later.

Frequently asked questions

How do I write 3:30 a.m. instead?

Put the minutes in the first field: 30 3 * * *. The order is minute before hour, which is the reverse of how people say the time out loud and the reason 3 30 * * * is such a common typo.

Can I run the job at 3 a.m. only on workdays?

Yes: 0 3 * * 1-5 covers Monday through Friday. Cron numbers Monday as 1 and Sunday as 0, and it also accepts the names MON-FRI, which many people find easier to read in a shared file.

The job did not run last night — where do I look?

Start with the system log, usually journalctl -u cron or /var/log/syslog, which records every start. A missing entry points to the schedule or the daemon; an entry without output points to the script, most often a wrong PATH or a relative path.

Does this page need my server details?

No. You only paste the schedule line, and it is analysed in your browser. Nothing is uploaded, so host names, paths or credentials that happen to sit in your crontab never leave your device.