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