Free tools · no login

◷ Cron expression explainer

The cron expression 0 0 */2 * * means: at 00:00, on every 2nd day of the month (1st, 3rd, 5th … 31st). In UTC its next runs are Tue 2026-10-13 00:00 and Thu 2026-10-15 00:00. A heartbeat monitor with a 60-minute grace period, pinged at the end of each run, alerts you when the job stops running or fails silently.

Paste a 5-field cron expression. Get what it means in plain English, when it runs next, and what could go wrong. Nothing is sent anywhere; it runs on our server in a few milliseconds.

Try: */5 * * * * (every 5 minutes) · 0 9 * * 1-5 (weekdays 09:00) · 0 0 1 * * (monthly) · 30 2 * * 0 (Sundays 02:30) · 0 9 1-7 * 1 (the OR trap) · @daily (macro)
0 0 */2 * *
At 00:00, on every 2nd day of the month (1st, 3rd, 5th … 31st).
minutehourday of monthmonthday of week
00*/2**
0016 values1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 120, 1, 2, 3, 4, 5, 6

Next 10 runs · UTC

  1. Tue 2026-10-13 00:00 UTC (+00:00) · in 3h 52m
  2. Thu 2026-10-15 00:00 UTC (+00:00) · in 2d 3h
  3. Sat 2026-10-17 00:00 UTC (+00:00) · in 4d 3h
  4. Mon 2026-10-19 00:00 UTC (+00:00) · in 6d 3h
  5. Wed 2026-10-21 00:00 UTC (+00:00) · in 8d 3h
  6. Fri 2026-10-23 00:00 UTC (+00:00) · in 10d 3h
  7. Sun 2026-10-25 00:00 UTC (+00:00) · in 12d 3h
  8. Tue 2026-10-27 00:00 UTC (+00:00) · in 14d 3h
  9. Thu 2026-10-29 00:00 UTC (+00:00) · in 16d 3h
  10. Sat 2026-10-31 00:00 UTC (+00:00) · in 18d 3h

Times are UTC, which is what most cloud servers and GitHub Actions use. Set a timezone above to see local times.

Watch out

Day-of-month steps restart every month: '*/2' runs on day 31 and then again on day 1 of the next month, so at some month ends it runs on two days in a row (or skips longer). For a true every-N-days rhythm, schedule daily and check the day number in the script.
Always true for crontab: it runs in the server's timezone (check with date), with a minimal PATH, and % must be escaped as \%.
Full guide with systemd, Kubernetes and GitHub Actions examples: Every other day

Monitor this job

cron never tells you when a job stops running. Add a heartbeat ping after the command: Vigil expects it on this schedule and alerts you if it doesn't arrive within the grace period (we'd suggest 60 minutes here).

crontab -e
0 0 */2 * * /usr/local/bin/my-job.sh && curl -fsS -m 10 --retry 3 -o /dev/null https://puzaricloud.in/ping/<your-token>
Report start, finish and exit code (catches failures and hangs, not just silence)
0 0 */2 * * curl -fsS -m 10 -o /dev/null https://puzaricloud.in/ping/<your-token>/start; /usr/local/bin/my-job.sh; curl -fsS -m 10 --retry 3 -o /dev/null https://puzaricloud.in/ping/<your-token>/$?

Replace /usr/local/bin/my-job.sh with your command and <your-token> with the token Vigil gives you. && means the ping only goes out when the job succeeded.

Watch this schedule — get alerted if it doesn't run

Link to this result:
How Vigil can watch this for you

Know the moment a cron job doesn't run

Paste the same expression into a Vigil heartbeat. Vigil works out when each run is due in your timezone, waits the grace period, then alerts you if the ping never came, if the job reported a failure, or if it started and never finished.

Monitor a cron job free
Free plan, no card. Alerts on email, Telegram, Slack, Discord, Teams or any webhook.
More free tools: