Developer Toolbox

Cron: every 30 minutes

Two runs an hour, on the hour and at half past. */30, 0,30 and 0-59/30 are three ways of writing the same schedule.

Open in Cron Parser The expression is filled in: change it and watch the next runs.

Expression

*/30 * * * *
Meaning

At every 30th minute: :00 and :30

Next 5 runs

Your time zone

The same schedule on other platforms

PlatformWritten asNote
Linux crontab*/30 * * * *Five fields, in the server's local time zone. A % in the command has to be escaped as \%.
GitHub Actions- cron: '*/30 * * * *'Five fields, in UTC unless a timezone (an IANA name such as Europe/Warsaw) is set next to cron. Default branch only. The shortest interval is 5 minutes; when GitHub is busy, runs start late and some are dropped.
Kubernetes CronJobschedule: "*/30 * * * *"Five fields, in the controller's time zone unless spec.timeZone is set (Kubernetes 1.27 and later). concurrencyPolicy decides what happens when runs overlap.
systemd timerOnCalendar=*:0/30Its own calendar syntax, in a .timer unit, local time. hourly, daily and monthly match cron, but weekly means Monday. Persistent=true catches up on runs missed while the machine was off.
AWS EventBridgecron(0/30 * * * ? *)Or rate(30 minutes), which counts from when the rule was created.
Quartz / Spring0 0/30 * * * ?Six fields, seconds first. Quartz needs ? in one of the day fields and counts Sunday as 1; Spring accepts ? and numbers days like cron.

Common mistakes

  • 30 * * * * runs once an hour

    Without the slash, the job runs only at half past each hour.

  • Every 30 seconds in Quartz

    Quartz starts with a seconds field, so 0/30 * * * * ? copied from a Quartz example means every 30 seconds, not every 30 minutes.

  • Two runs at other minutes

    A list sets them freely: 10,40 * * * * runs at :10 and :40.