Run a Cron Job Every Day at 11 PM
To run a job every day at 11 PM, use 0 23 * * *. It fires once a day at 23:00 server time — minute 0, hour 23, every day of the month, every month, every day of the week.
The crontab line
Run crontab -e and add:
0 23 * * * /usr/bin/bash /path/to/job.sh >> /path/to/job.log 2>&1
This runs once a day at 23:00. The five fields are minute, hour, day-of-month, month, day-of-week.
Field breakdown
0 23 * * *: minute 0, hour 23 (24-hour clock), the three * mean every day, every month, every weekday.
Change the minute or time
To fire at 11 PM thirty, set the minute field: 30 23 * * *. For a different hour, change the hour field (0–23).
Timezone
Cron uses the server's local time. Check it with timedatectl. If your box runs UTC, 23:00 is UTC — set CRON_TZ=Europe/London at the top of the crontab (modern cron) or set the hour in UTC.
FAQ
What is the cron expression for every day at 11 PM?
0 23 * * * runs once a day at 23:00 server time. The first field is the minute, the second is the hour (24-hour).
How do I run a job at 11 PM on weekdays only?
Add 1-5 in the day-of-week field: 0 23 * * 1-5 runs Monday to Friday at 23:00.
Why does my daily job run at the wrong time?
Cron uses the server timezone, not yours. Check with timedatectl and either convert the hour to the server's zone or set CRON_TZ at the top of the crontab.