/

Cron: Every 2 Minutes

*/2 * * * * uses cron's step syntax — the /2 means "every 2nd value" within the minute field's full range (0–59), so the job fires at :00, :02, :04, and so on. It's a common middle ground when every-minute is too aggressive but a 5-minute gap feels too slow.

*/2 * * * *

Examples & Variations

*/2 * * * *

Every 2 minutes

Try it

1-59/2 * * * *

Every 2 minutes, offset to odd minutes

Try it

*/2 9-17 * * 1-5

Every 2 minutes, weekday business hours

Try it

Common Mistakes

  • Assuming */2 starts counting from whenever the job was deployed — it doesn't. Step values always align to the field's start (minute 0), not to deploy time.
  • Confusing */2 in the minute field with "every 2 hours" — that requires putting the /2 in the hour field instead: 0 */2 * * *.
  • Not accounting for clock drift on self-hosted cron daemons, which can cause a run to be skipped entirely if the system clock jumps.

Best Practices

  • Use */2 for lightweight sync jobs — anything heavier tends to benefit more from an explicit queue than tighter polling.
  • If you need an offset (e.g. starting at minute 1 instead of 0), use a range with a step like 1-59/2 rather than assuming an implicit offset.
  • Pair with the same overlap protection you'd use for every-minute jobs — a 2-minute window is still tight for anything with variable runtime.

Frequently Asked Questions

How does the */2 step syntax actually work?
The number after the slash is a step size applied to the field's full range. In the minute field (0–59), */2 expands to 0,2,4,6,...,58 — every second value starting from the field's minimum.
Is */2 * * * * the same as 0,2,4,6,... * * * *?
Yes, functionally identical. The step syntax is just a shorthand for an explicit comma-separated list covering every 2nd minute.
What if I want every 2 minutes starting at :01 instead of :00?
Use 1-59/2 * * * * — this restricts the step to the range starting at minute 1, producing :01, :03, :05, and so on.