---
title: "Cron Job &amp; Heartbeat Monitoring — Alerts When Jobs Don't Run | FourSight"
description: "Heartbeat monitoring for cron jobs, scheduled tasks &amp; background workers. Ping a URL when the job runs; get alerted when it doesn't. Included in Growth — $40/mo."
lang: en
json-ld: |
  [
    {
      "@context": "https://schema.org",
      "@type": "FAQPage",
      "mainEntity": [
        {
          "@type": "Question",
          "name": "What happens if my job runs but fails?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Chain the ping so it only fires on success (the && pattern in cron, or an if: success() step in GitHub Actions). A job that crashes then looks identical to a job that never ran: no ping arrives, the grace period expires, and FourSight opens an incident."
          }
        },
        {
          "@type": "Question",
          "name": "What's the difference between heartbeat monitoring and uptime monitoring?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Direction. Uptime monitoring is outside-in — FourSight probes your endpoint from four regions. Heartbeat monitoring is inside-out — your job calls FourSight, and the absence of that call is the failure signal. You need both: uptime checks for anything with a URL, heartbeats for anything on a schedule."
          }
        },
        {
          "@type": "Question",
          "name": "How do I handle jobs with variable runtimes?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Set the grace period to cover the worst-case runtime — a nightly warehouse refresh that takes 12 minutes normally but 45 at month-end gets a 45-minute grace period. For extra noise resistance, raise the miss threshold to 2 so one slow run never pages anyone but two consecutive misses do."
          }
        },
        {
          "@type": "Question",
          "name": "Is the ping URL secure?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Each monitor gets its own long random token, the URL accepts simple GET/POST pings, and tokens can be revoked and regenerated at any time — if a token leaks into a public repo, rotate it without recreating the monitor."
          }
        },
        {
          "@type": "Question",
          "name": "Which FourSight plan includes heartbeat monitoring?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Heartbeat is one of the six check types that unlock on the Growth plan at $40/mo flat, alongside SSL, DNS, domain expiry, keyword, and port monitoring. Free and Starter cover HTTP and ping checks."
          }
        },
        {
          "@type": "Question",
          "name": "Can I monitor Windows Scheduled Tasks and PowerShell scripts?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Yes — add an Invoke-RestMethod call at the end of the script (snippet above). It works the same for anything that can make an HTTP request: systemd timers, Kubernetes CronJobs, Airflow DAGs, Laravel scheduler, Sidekiq, or a Raspberry Pi in a closet."
          }
        }
      ]
    },
    {
      "@context": "https://schema.org",
      "@type": "BreadcrumbList",
      "itemListElement": [
        {
          "@type": "ListItem",
          "position": 1,
          "name": "Home",
          "item": "https://foursight.cloud"
        },
        {
          "@type": "ListItem",
          "position": 2,
          "name": "Features",
          "item": "https://foursight.cloud/#features"
        },
        {
          "@type": "ListItem",
          "position": 3,
          "name": "Cron Job & Heartbeat Monitoring",
          "item": "https://foursight.cloud/features/cron-job-monitoring"
        }
      ]
    }
  ]
---

[FourSight ](/)

[Features](/#features)[Pricing](/pricing)[Guides](/guides)[Glossary](/glossary)[FAQ](/faq)

[Login](/auth)[Start free](/auth?signup=true)

[Start free](/auth?signup=true)

Heartbeat monitoring

# Cron job monitoring that alerts you when jobs don't run

Cron job monitoring (heartbeat monitoring) works by inversion: your job pings a unique FourSight URL every time it completes. If the ping doesn't arrive within the expected interval plus a grace period, FourSight opens an incident and alerts you — catching silent failures that uptime checks can't see.

[Start monitoring free](/auth?signup=true) [View pricing](/pricing)

Uptime monitoring answers "is my site up?" Heartbeat monitoring answers a harder question: "did my backup actually run last night?" Cron jobs, scheduled tasks, ETL pipelines, and queue workers fail silently — the server stays up, the site keeps responding, and nothing anywhere reports that the 3 AM database backup hasn't completed in eleven days.

That failure mode is invisible to conventional monitoring because there is nothing to probe. A dead cron job doesn't return a 500; it simply produces no output at all. The only reliable way to catch it is a dead man's switch: the job must actively prove it ran, and silence becomes the alert.

FourSight's heartbeat monitors do exactly that, alongside the seven other check types on the same dashboard, the same escalation policies, and the same status pages — so your scheduled jobs are monitored with the same rigor as your public endpoints.

## How does heartbeat monitoring work?

When you create a heartbeat monitor, FourSight generates a unique, unguessable ping URL for that job. You add one line to the end of the job — a curl call, an Invoke-RestMethod, a fetch — so the job reports in every time it finishes successfully. FourSight records each ping with its timestamp, source IP, and user agent, giving you a verifiable log of every run.

Three settings define what counts as a failure. The expected interval is how often the job should run — every 5 minutes, hourly, nightly. The grace period is slack added on top, so a job that finishes 40 seconds late on a nightly schedule doesn't page anyone (the default is 60 seconds; tune it to your job's worst-case runtime). The miss threshold is how many consecutive expected pings can be missed before an incident opens — 1 for critical jobs, 2 or more for jobs with naturally variable runtimes.

For jobs that don't run on a fixed interval, FourSight supports cron expression scheduling: give the monitor the same cron expression as the job itself (for example 0 3 \* \* \*) and it computes exactly when each ping is due, applying the grace period around each expected run rather than a rolling interval.

Heartbeat monitor settings

Setting

What it controls

Default

Expected interval

How often the job should ping (interval mode)

5 minutes

Cron expression

Exact schedule for cron-mode monitors (e.g. 0 3 \* \* \*)

—

Grace period

Extra time allowed after a ping is due before it counts as missed

60 seconds

Miss threshold

Consecutive missed pings before an incident opens

1

## How do I add a heartbeat ping to my cron job?

One line, appended to the job. The && in the crontab example matters: the ping only fires when the job exits successfully, so a crashing script is treated exactly like a script that never ran — which is what you want.

crontab (Linux/macOS)

```
# Ping only fires if the backup script exits 0
0 3 * * * /opt/scripts/backup-db.sh && curl -fsS --retry 3 --max-time 10 https://ping.foursight.cloud/hb/<YOUR_TOKEN>
```

PowerShell (Windows Task Scheduler)

```
# At the end of your scheduled task script
try {
    Invoke-RestMethod -Uri "https://ping.foursight.cloud/hb/<YOUR_TOKEN>" -Method Get -TimeoutSec 10
} catch {
    Write-Warning "FourSight heartbeat ping failed: $_"
}
```

GitHub Actions (scheduled workflow)

```
name: nightly-backup
on:
  schedule:
    - cron: "0 3 * * *"
jobs:
  backup:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Run backup
        run: ./scripts/backup.sh
      - name: Report success to FourSight
        if: success()
        run: curl -fsS --retry 3 https://ping.foursight.cloud/hb/${{ secrets.FOURSIGHT_HEARTBEAT_TOKEN }}
```

**Tip:** GitHub Actions scheduled workflows are silently disabled after 60 days of repository inactivity — a heartbeat monitor is the only way to find out before it matters.

## What should I monitor with heartbeats?

Anything that's supposed to happen on a schedule and would hurt if it quietly stopped. The common thread: none of these have a URL you could point an uptime check at.

-   Database backups and snapshot rotation — the classic silent failure, discovered only during a restore 
-   ETL and data-pipeline runs — warehouse refreshes, nightly aggregations, report generation 
-   Certificate and secret rotation scripts 
-   Queue workers and consumers — have the worker ping on each processing loop 
-   Billing and invoicing jobs — a skipped dunning run is directly lost revenue 
-   Scheduled CI workflows, cleanup tasks, log rotation, and sitemap regeneration 
-   IoT devices and on-prem agents that should check in on a known cadence 

## How does FourSight compare to Cronitor and Healthchecks.io?

Honestly: Cronitor and Healthchecks.io are both excellent, purpose-built cron monitors. Cronitor adds job telemetry and performance metrics; Healthchecks.io is open source, self-hostable, and has one of the most generous free tiers in the category. If heartbeats are the only thing you need, either is a fine choice.

The case for FourSight is consolidation. Cron monitoring is rarely the whole job — the same team also needs uptime checks, SSL expiry, DNS drift, port checks, and a public status page, and running a dedicated cron monitor alongside a separate uptime monitor means two dashboards, two alert configurations, two invoices, and two places incidents can hide. FourSight's Growth plan puts heartbeats next to the other seven check types under one escalation policy for a flat $40/mo.

FourSight vs dedicated cron monitors

Capability

FourSight

Cronitor

Healthchecks.io

Heartbeat / cron monitoring

Yes (Growth plan and above)

Yes — core product

Yes — core product

Cron expression schedules

Yes

Yes

Yes

Full uptime monitoring (HTTP, SSL, DNS, domain, port, keyword, ping)

Yes — 8 check types included

Uptime checks available; narrower type coverage

No — heartbeats only

Multi-region confirmation before alerting

4-region quorum

No equivalent

No equivalent

Public status pages

Included on every plan

Available on paid plans

Not included

Self-host option

No

No

Yes — open source

Job telemetry / runtime metrics

Ping log with timestamp, source IP & payload

Yes — richer job metrics

Basic ping log

## Why consolidate cron and uptime monitoring in one tool?

Because incidents don't respect tool boundaries. When a database server degrades, the symptom often shows up in three places at once: the API slows down (HTTP check), the backup job overruns its window (heartbeat), and the replica port stops accepting connections (port check). If those three signals live in three tools, you triage three alert streams and correlate by hand at 3 AM. In one tool, they're one incident timeline.

Consolidation also fixes the quieter problem of coverage decay. Standalone cron monitors are set up by one engineer and forgotten; when they leave, the account lapses and nobody notices — the monitoring equivalent of the silent cron failure it was meant to catch. Keeping heartbeats inside the platform your team already uses for uptime keeps them visible, reviewed, and owned.

Included in Growth — $40/mo flat

## Monitor your first cron job in five minutes

Heartbeat monitors are included in the Growth plan alongside all eight check types, 100 monitors, 30-second intervals, escalation policies, and five status pages — one flat price, no per-monitor fees.

-   Unique ping URL per job — one line of shell to integrate 
-   Interval or cron-expression schedules with a configurable grace period 
-   Ping log with timestamp, source IP, and payload as run evidence 
-   Same escalation policies and status pages as your uptime checks 

[Start free, upgrade when ready](/auth?signup=true)[See Growth plan details](/pricing)

FAQ

## Common questions

### What happens if my job runs but fails?

Chain the ping so it only fires on success (the && pattern in cron, or an if: success() step in GitHub Actions). A job that crashes then looks identical to a job that never ran: no ping arrives, the grace period expires, and FourSight opens an incident.

### What's the difference between heartbeat monitoring and uptime monitoring?

Direction. Uptime monitoring is outside-in — FourSight probes your endpoint from four regions. Heartbeat monitoring is inside-out — your job calls FourSight, and the absence of that call is the failure signal. You need both: uptime checks for anything with a URL, heartbeats for anything on a schedule.

### How do I handle jobs with variable runtimes?

Set the grace period to cover the worst-case runtime — a nightly warehouse refresh that takes 12 minutes normally but 45 at month-end gets a 45-minute grace period. For extra noise resistance, raise the miss threshold to 2 so one slow run never pages anyone but two consecutive misses do.

### Is the ping URL secure?

Each monitor gets its own long random token, the URL accepts simple GET/POST pings, and tokens can be revoked and regenerated at any time — if a token leaks into a public repo, rotate it without recreating the monitor.

### Which FourSight plan includes heartbeat monitoring?

Heartbeat is one of the six check types that unlock on the Growth plan at $40/mo flat, alongside SSL, DNS, domain expiry, keyword, and port monitoring. Free and Starter cover HTTP and ping checks.

### Can I monitor Windows Scheduled Tasks and PowerShell scripts?

Yes — add an Invoke-RestMethod call at the end of the script (snippet above). It works the same for anything that can make an HTTP request: systemd timers, Kubernetes CronJobs, Airflow DAGs, Laravel scheduler, Sidekiq, or a Raspberry Pi in a closet.

Keep reading

## Related guides, terms & comparisons

-   [FourSight pricing — heartbeats unlock in Growth ($40/mo) ](/pricing)
-   [Guide: Heartbeat monitoring for cron jobs ](/guides/heartbeat-monitoring-cron-jobs)
-   [Guide: Monitoring PowerShell scripts and scheduled tasks ](/guides/monitoring-powershell-scripts)
-   [Guide: Heartbeat monitoring for webhooks & ETL ](/guides/heartbeat-monitoring-webhooks-etl)
-   [Glossary: Heartbeat monitor ](/glossary/heartbeat-monitor)
-   [Glossary: Cron job ](/glossary/cron-job)
-   [Glossary: Grace period ](/glossary/grace-period)
-   [Compare: FourSight vs Uptime Kuma ](/compare/uptime-kuma-alternative)

More check types

## Explore FourSight's other monitors

[SSL Certificate Monitoring](/features/ssl-monitoring)[Status Pages](/features/status-pages)[Domain Expiry Monitoring](/features/domain-expiry-monitoring)[DNS Monitoring](/features/dns-monitoring)[Port Monitoring](/features/port-monitoring)

## Start monitoring in under 60 seconds

No credit card required. 10 free monitors with 4-region consensus — commercial use allowed.

[Start monitoring free](/auth?signup=true) [View pricing](/pricing)

FourSight 

© 2026 [TetraCore](https://tetracorehq.com/). All rights reserved.

FourSight is a TetraCore product — Bowling Green, Ohio.

Product

[Pricing](/pricing)[Guides](/guides)[Glossary](/glossary)[FAQ](/faq)[About](/about)[For Agencies](/solutions/agencies)[For Startups](/solutions/startups)[Privacy](/privacy)[Terms](/terms)

Features

[Cron Job & Heartbeat Monitoring](/features/cron-job-monitoring)[SSL Certificate Monitoring](/features/ssl-monitoring)[Status Pages](/features/status-pages)[Domain Expiry Monitoring](/features/domain-expiry-monitoring)[DNS Monitoring](/features/dns-monitoring)[Port Monitoring](/features/port-monitoring)

Compare

[All comparisons](/compare)[vs UptimeRobot](/compare/uptimerobot-alternative)[vs StatusCake](/compare/statuscake-alternative)[vs Freshping](/compare/freshping-alternative)[vs Pingdom](/compare/pingdom-alternative)[vs Pulsetic](/compare/pulsetic-alternative)[vs Better Stack](/compare/better-stack-alternative)[vs Uptime Kuma](/compare/uptime-kuma-alternative)[vs Cronitor](/compare/cronitor-alternative)[vs Healthchecks.io](/compare/healthchecks-alternative)[vs Hyperping](/compare/hyperping-alternative)

Pricing Guides

[UptimeRobot Pricing](/compare/uptimerobot-pricing)[StatusCake Pricing](/compare/statuscake-pricing)[Pingdom Pricing](/compare/pingdom-pricing)[Better Stack Pricing](/compare/better-stack-pricing)[Uptime Kuma Pricing](/compare/uptime-kuma-pricing)[Cronitor Pricing](/compare/cronitor-pricing)[Healthchecks.io Pricing](/compare/healthchecks-pricing)[Hyperping Pricing](/compare/hyperping-pricing)[Pulsetic Pricing](/compare/pulsetic-pricing)