CronForge — Cron job monitoring & alerting for developers
Cron monitoring for developers

Know your cron jobs failed before your users do.

CronForge watches every scheduled task, detects silent failures and missed runs, and pages you on the channel you already use. One ping per job. Zero infrastructure.

ping-on-success.js
// add one line to the end of your job
await fetch("https://cronforge.io/ping/8f3a-cron-01")
# add one line to the end of your job
requests.get("https://cronforge.io/ping/8f3a-cron-01")
// add one line to the end of your job
http.Get("https://cronforge.io/ping/8f3a-cron-01")
# add one line to the end of your job
curl https://cronforge.io/ping/8f3a-cron-01
How it works

Three things, done well.

CronForge is not a general-purpose observability platform. It does one thing: it tells you when a scheduled job stops behaving. Everything else is noise.

Heartbeat monitoring

Each job gets a unique ping URL. CronForge expects a ping at the interval you define. If a ping doesn't arrive on time, you get an alert — no agent, no sidecar, no config file.

expect every 5m · grace 60s
heartbeat.log
# job: nightly-backup
02:00:00 PING  ok  200 12ms
02:05:00 PING  ok  200 11ms
02:10:00 MISSED  grace 60s
02:11:00 ALERT slack #ops

Exit-code & duration tracking

Send a ping with an exit code and runtime. CronForge tracks p95 duration per job and flags regressions, so a job that silently slowed from 40s to 9m gets caught before it times out in production.

/ping/<id>?exit=0&dur=38.2
duration.json
{
  "job": "nightly-backup",
  "p50": 38.2,
  "p95": 41.7,
  "trend": "stable",
  "regression": false
}

Alerts where you already are

Slack, PagerDuty, email, webhooks, and Discord. Route by job, by severity, by schedule. Escalate to PagerDuty only after two consecutive misses — no 3am pages for a flaky network blip.

route: slack → pagerduty (2 misses)
alert-rules.toml
# alert routing
[[rule]]
job = "nightly-backup"
on = ["missed", "exit!=0"]

[[rule.notify]]
channel = "slack"
target = "#ops"
escalate_after = 2
Live monitor

This is what your dashboard looks like at 02:11.

Every job, every run, every exit code — streamed in real time. No refresh button. No polling. Just the terminal you already trust.

cronforge — live monitor
connected · wss://cronforge.io/stream 14 jobs · 3 environments
02:00:00OKnightly-backup — exited 0 in 38.2s
02:00:15OKsync-stripe — exited 0 in 4.1s
02:01:02OKprune-logs — exited 0 in 1.2s
02:05:00OKnightly-backup — exited 0 in 37.9s
02:05:15OKsync-stripe — exited 0 in 4.3s
02:10:00WAITnightly-backup — expected ping, grace 60s
02:11:00FAILnightly-backup — missed ping, alerting #ops
02:11:01SENTslack — delivered to #ops (3 members)
02:11:02SENTpagerduty — escalated after 2nd consecutive miss
02:14:33OKnightly-backup — recovered, exited 0 in 39.1s
02:14:34SENTslack — resolved in #ops
Pricing

Pay for jobs, not seats.

Every plan includes unlimited team members, all alert channels, and 90-day history. Upgrade when you add more cron jobs.

Hobby
$0 /mo
For side projects and learning.
  • > 5 cron jobs
  • > 30-day history
  • > Email & Slack alerts
  • > 1 environment
Start free →
Team
$79 /mo
For teams that ship on a schedule.
  • > 250 cron jobs
  • > 1-year history
  • > PagerDuty & webhooks
  • > Unlimited environments
  • > Audit log & SSO
Talk to us →
≡ hart

Hosted on hart

intrane-landings/06-cronforgepublic
🏠 hart home🔎 Explore public👤 More from intrane-landings