Cron Expression for Every 30 Minutes
*/30 * * * **/30 * * * * runs at :00 and :30 every hour — with a 60-minute field, a step of 30 yields exactly those two minutes, so it is identical to 0,30 * * * *.
Next runs, in your timezone
Two equivalent spellings
Because 30 divides 60 exactly twice, */30 and 0,30 are the same schedule. Prefer whichever your team reads faster; prefer 15,45 if you want the same cadence away from the top-of-hour spike.
*/30 * * * * /path/to/job.sh
0,30 * * * * /path/to/job.sh # identical
15,45 * * * * /path/to/job.sh # same cadence, quieter minutesHalf-hourly vs twice an hour
All three lines above fire twice per hour at fixed minutes. If you need "30 minutes after the previous run finished", cron cannot express it — that is a queue or a systemd timer with OnUnitInactiveSec, not a cron schedule.
Equivalent expressions
0,30 * * * *— identical schedule, spelled as a list
Run a SQL query on this schedule
If the job behind this schedule is a database query, you can skip the server and the crontab: SaturnSQL runs saved SQL queries on a cron expression — this exact syntax, with a real timezone field — and delivers the results to Google Sheets or Slack. Minimum interval 5 minutes.