Run a cron job every 2 minutes

*/2 * * * * Check it below, then take the line for any of 17 schedulers.

Click to edit · paste a crontab line · hover a field for its values

Every 2 minutes.

 

Runs can pile up

If a run takes longer than 2 minutes, Debian / Ubuntu cron starts the next one anyway, on top of it.

crontab line
# crontab -e  (runs on the server's clock: UTC)
*/2 * * * *  /path/to/command
Debian / Ubuntu cron RunWisp Server was off Skipped. anacron only catches up cron.daily, weekly and monthly. Runs the most recent missed run at start-up (catch_up = 1) and sends a missed-run alert.A run fails Output is mailed if MAILTO and a mail server work. No output, no mail, whatever the exit code. Marked failed and sent to your alert channels. retry_attempts adds retries.

· sudo runwisp takeover runs your crontab as it is · How RunWisp compares

Details

Upcoming runs
Calendar Every day
Between two dates
Daylight saving

When things go wrong Server off: Skipped
Server was off
Skipped. anacron only catches up cron.daily, weekly and monthly.
Last run still going
Starts another copy on top.
A run fails
Output is mailed if MAILTO and a mail server work. No output, no mail, whatever the exit code.
Time zone
The server's zone. TZ= in a crontab only reaches the command.
Precision
1 minute.

Sources: manpages.debian.org,manpages.debian.org

Other schedulers As written in 8 of 16
  • ✓ cronie */2 * * * * vs RunWisp
  • ✓ BusyBox crond */2 * * * *
  • ↻ systemd timer *-*-* *:00/2:00 UTC systemd timer uses OnCalendar=, not cron lines. vs RunWisp
  • ✓ RunWisp */2 * * * *
  • ✓ Kubernetes CronJob */2 * * * *
  • ≠ Ofelia 0 */2 * * * * Ofelia puts seconds first, so it reads this as: every 2 seconds. vs RunWisp
  • ✓ Dagu */2 * * * * vs RunWisp
  • ✓ PM2 cron_restart */2 * * * * vs RunWisp
  • ≠ Jobber 0 */2 * * * * Jobber puts seconds first, so it reads this as: every 2 seconds. vs RunWisp
  • ≠ GitHub Actions GitHub runs scheduled workflows at most every 5 minutes.
  • ≠ GitLab CI schedule Schedules can't run more often than GitLab's worker: every 5 minutes on GitLab.com.
  • ↻ AWS EventBridge Scheduler cron(*/2 * * * ? *) AWS EventBridge Scheduler takes cron() with 6 fields, a year last, and ? in one day field.
  • ✓ Google Cloud Scheduler */2 * * * *
  • ✓ Jenkins */2 * * * *
  • ↻ Quartz 0 */2 * * * ? Quartz takes 6 or 7 fields, seconds first, with ? in one day field.
  • ↻ Spring @Scheduled 0 */2 * * * * Spring @Scheduled takes exactly 6 fields, seconds first.

✓ works as written · ↻ different syntax · ≠ runs at other times · ? not documented · ✗ can't

Schedulers

Every 2 minutes, in every scheduler

Works as written in 9 of 17. Times are UTC; the checker above takes any zone.

Runs in 2027
262,800
Days with a run
365
Longest gap
2 min
SchedulerLineNotes
Debian / Ubuntu cron ✓ */2 * * * * Works as written.
cronie ✓ */2 * * * * Works as written.
BusyBox crond ✓ */2 * * * * Works as written.
systemd timer ↻ OnCalendar=*-*-* *:00/2:00 UTC systemd timer uses OnCalendar=, not cron lines.
RunWisp ✓ */2 * * * * Works as written.
Kubernetes CronJob ✓ */2 * * * * Works as written.
Ofelia ≠ 0 */2 * * * * Ofelia puts seconds first, so it reads this as: every 2 seconds.
Dagu ✓ */2 * * * * Works as written.
PM2 cron_restart ✓ */2 * * * * Works as written.
Jobber ≠ 0 */2 * * * * Jobber puts seconds first, so it reads this as: every 2 seconds.
GitHub Actions ≠ GitHub runs scheduled workflows at most every 5 minutes.
GitLab CI schedule ≠ Schedules can't run more often than GitLab's worker: every 5 minutes on GitLab.com.
AWS EventBridge Scheduler ↻ cron(*/2 * * * ? *) AWS EventBridge Scheduler takes cron() with 6 fields, a year last, and ? in one day field.
Google Cloud Scheduler ✓ */2 * * * * Works as written.
Jenkins ✓ */2 * * * * Works as written.
Quartz ↻ 0 */2 * * * ? Quartz takes 6 or 7 fields, seconds first, with ? in one day field.
Spring @Scheduled ↻ 0 */2 * * * * Spring @Scheduled takes exactly 6 fields, seconds first.

✓ works as written · ↻ different syntax · ≠ runs at other times · ? not documented · ✗ can't

RunWisp

Cron runs the line. Nobody tells you how it went.

RunWisp is an open-source cron replacement that ships as a single binary. It reads the same cron line and keeps a record of every run: output, exit code, duration.

crontab
# crontab -e  (runs on the server's clock: UTC)
*/2 * * * *  /usr/local/bin/job.sh
runwisp.toml
[tasks.job]
cron     = "*/2 * * * *"
timezone = "UTC"
run      = '/usr/local/bin/job.sh'
cronRunWisp
The server was off at run time Skipped. anacron only catches up cron.daily, weekly and monthly. Runs the most recent missed run at start-up (catch_up = 1) and sends a missed-run alert.
The last run is still going Starts another copy on top. Queues it. on_overlap = "queue" is the default.
A run fails Output is mailed if MAILTO and a mail server work. No output, no mail, whatever the exit code. Marked failed and sent to your alert channels. retry_attempts adds retries.

Keep your crontab. sudo runwisp takeover runs it where it is and retires cron, crontab -e keeps working, and runwisp service uninstall puts cron back. It needs Linux with systemd; elsewhere, runwisp import cron converts the file. RunWisp doesn't do L, W or #, and it runs on one machine, not a cluster. Moving from cron →

FAQ

Questions

What does */2 * * * * mean?
Every 2 minutes. In 2027 that's 262,800 runs on 365 days. Times are in the scheduler's time zone, usually the server's.
How do I run a job every 2 minutes with a systemd timer?
OnCalendar=*-*-* *:00/2:00 UTC. systemd timer uses OnCalendar=, not cron lines.
How do I run a job every 2 minutes in a Kubernetes CronJob?
*/2 * * * * works as written.
How do I run a job every 2 minutes in GitHub Actions?
. GitHub runs scheduled workflows at most every 5 minutes.
How do I run a job every 2 minutes on AWS EventBridge?
cron(*/2 * * * ? *). AWS EventBridge Scheduler takes cron() with 6 fields, a year last, and ? in one day field.
More
Get started
GPL 3.0 · no accounts · free to self-host

Start in 30 seconds. Ship on your terms.

A single Go binary. If it doesn't earn the disk space, rm it. No account, no signup, no catch.

Install in 30 seconds
curl -fsSL https://get.runwisp.com | sh