Skip to content
Cron Cookbook

Run a job every 30 minutes

The cron expression for every 30 minutes is */30 * * * *. The */30 step in the minute field fires at :00 and :30, twice an hour and 48 times a day.

crontab syntax · 5 fields
*/30****

Next 5 runs

Vercel always runs schedules in UTC, and GitHub Actions does unless you set a time zone. Crontab and Kubernetes use the server's time zone.

Field by field

*/30Minute
Every 30th minute: 0, 30
*Hour
Every hour, 0 to 23
*Day of month
Every day of the month
*Month
Every month
*Day of week
Every day of the week

By platform

Most schedulers take the same five fields. The wrapper, time zone and limits differ.

crontab -e
# m h  dom mon dow   command
*/30 * * * * /usr/local/bin/sync.sh >> /var/log/sync.log 2>&1

Runs in the server's local time zone

Cron starts jobs with a minimal environment: use absolute paths, and send output to a log so failures don't disappear.

Other 30-minute schedules

Change the starting minute to move runs off the hour and half hour, or narrow the hour and weekday fields.

ExpressionRuns
0,30 * * * *Same as */30 * * * *, with the minutes listed
15,45 * * * *Every 30 minutes at :15 and :45
*/30 9-17 * * 1-5Every 30 minutes from 09:00 through 17:30, Monday through Friday (the hour range includes 17:30)
30 * * * *Once an hour at half past, not every 30 minutes