Documentation

Everything you need to get started with CronRabbit monitoring.

Quick Start

1

Create a Monitor

Log into your dashboard and create a new monitor. Give it a name, set the expected schedule using a cron expression (e.g., 0 2 * * * for 2 AM daily), and configure a grace period.

2

Copy Your Ping URL

Each monitor gets a unique ping URL. Copy it from the monitor detail page.

https://ping.cronrabbit.com/abc123-your-monitor-id
3

Add to Your Script

Add an HTTP request to the end of your script. When the request succeeds, we know your job ran.

Signal Types

CronRabbit supports different signal types to give you complete visibility into your job execution.

Success Ping

The standard ping. Send this when your job completes successfully.

curl -fsS -m 10 --retry 5 --retry-all-errors https://ping.cronrabbit.com/your-id

/start Signal

Send at the beginning of your job to track duration.

curl https://ping.cronrabbit.com/your-id/start

/fail Signal

Explicitly signal failure. Triggers an immediate alert.

curl https://ping.cronrabbit.com/your-id/fail

Exit Code

Append exit code to the URL. Non-zero triggers an alert.

curl -fsS -m 10 --retry 5 --retry-all-errors https://ping.cronrabbit.com/your-id/$?

Metadata Payload

Attach JSON or text as the HTTP POST body. It will appear on your dashboard. Limit: 10KB.

curl -fsS -m 10 --retry 5 --retry-all-errors -X POST -d '{"key": "value"}' https://ping.cronrabbit.com/your-id

Supported HTTP Methods

All CronRabbit endpoints support GET, HEAD, and POST methods. Our ingest server is highly optimized to parse requests and respond with an ultra-light 204 No Content status footprint footprint.

GETStandard Ping

The default and simplest method to send a quick ping using tools like curl or wget.

curl -fsS -m 10 --retry 5 --retry-all-errors https://ping.cronrabbit.com/your-id

HEADMinimal Payload

The most efficient way to ping. Instructs the system to completely omit any body payload and just establish the HTTP connection to execute the ping command. Perfect for minimizing bandwidth overhead in constrained environments.

curl -fsS -m 10 --retry 5 --retry-all-errors -I https://ping.cronrabbit.com/your-id

POSTMetadata Attachment

Use POST when you want to send along a payload. Attach JSON configuration options, task results, or plain text stack traces inside the request body. They render beautifully right onto your monitoring dashboard. Note: Payloads are limited to 10KB per request.

curl -fsS -m 10 --retry 5 --retry-all-errors -X POST -H "Content-Type: application/json" -d '{"records_processed": 500}' https://ping.cronrabbit.com/your-id

Integration Examples

Copy-paste examples for common languages and use cases.

Bash / Shell

Simple ping at end of script:
#!/bin/bash
# Your backup script
tar -czf /backup/data.tar.gz /data

# Ping on success
curl -fsS -m 10 --retry 5 --retry-all-errors https://ping.cronrabbit.com/your-id
With duration tracking:
#!/bin/bash
# Signal start
curl -fsS -m 5 --retry 3 --retry-all-errors https://ping.cronrabbit.com/your-id/start

# Your job
./run-etl-pipeline.sh

# Signal success (duration calculated automatically)
curl -fsS -m 10 --retry 5 --retry-all-errors https://ping.cronrabbit.com/your-id
With exit code reporting:
#!/bin/bash
./your-job.sh
curl -fsS -m 10 --retry 5 --retry-all-errors https://ping.cronrabbit.com/your-id/$?

🐍Python

Using requests:
import requests

PING_URL = "https://ping.cronrabbit.com/your-id"

def main():
    # Signal start for duration tracking
    requests.post(f"{PING_URL}/start", json={"status": "Starting backup"}, timeout=10)
    
    try:
        # Your job logic here
        run_backup()
        
        # Signal success with metadata
        requests.post(PING_URL, json={"files_backed_up": 142}, timeout=10)
    except Exception as e:
        # Signal failure with error details
        requests.post(f"{PING_URL}/fail", json={"error": str(e)}, timeout=10)
        raise

if __name__ == "__main__":
    main()

Node.js

Using fetch (Node 18+):
const PING_URL = "https://ping.cronrabbit.com/your-id";

async function main() {
    // Signal start
    await fetch(`${PING_URL}/start`, { method: "POST", body: "Starting sync..." });
    
    try {
        // Your job logic
        const result = await runDataSync();
        
        // Signal success with JSON metadata
        await fetch(PING_URL, {
            method: "POST",
            headers: { "Content-Type": "application/json" },
            body: JSON.stringify({ records_synced: result.count })
        });
    } catch (error) {
        // Signal failed
        await fetch(`${PING_URL}/fail`, { method: "POST", body: error.message });
        throw error;
    }
}

main();

Crontab Integration

Wrap existing cron command:
# Before
0 2 * * * /scripts/backup.sh

# After (with monitoring)
0 2 * * * /scripts/backup.sh && curl -fsS -m 10 --retry 5 --retry-all-errors https://ping.cronrabbit.com/your-id

Best Practices for Resilient Pings

Networks are inherently flaky. A momentary drop in connection or a brief DNS resolution failure could cause a ping to fail, triggering a false-positive "DOWN" alert in your dashboard. To make your pings robust, we strongly recommend compiling a few basic flags into your curl requests.

Avoid Zombie Jobs with Timeout

By default, curl has no timeout limit. If any server hangs, your script will wait forever! Applying a strict maximum time frame ensures your job exits cleanly no matter what.

curl -m 10 --retry 5 --retry-all-errors https://ping.cronrabbit.com/your-id

Overcome Network Blips with Retries

A simple drop in connection triggers a DOWN alert. By forcing an automatic retry protocol when the connection inevitably drops, you reduce false-positive emails to absolute zero.

curl --retry 5 --retry-all-errors https://ping.cronrabbit.com/your-id

The Ultimate Reliable Command

Combine both flags into your scripts for rock-solid stability. We advise using this setup for all your production jobs.

curl -fsS -m 10 --retry 5 --retry-all-errors https://ping.cronrabbit.com/your-id

Setting Up Alert Integrations

Configure where you want to receive alerts. Set up integrations at the workspace level, then enable them for individual monitors.

#

Slack

  1. Go to Environment Settings → Integrations
  2. Click Add Integration → Slack
  3. Create an Incoming Webhook in your Slack workspace
  4. Paste the webhook URL and save
  5. Enable Slack alerts on your monitors
D

Discord

  1. Go to your Discord server's Channel Settings → Integrations → Webhooks
  2. Create a new webhook and copy the URL
  3. In CronRabbit, go to Environment Settings → Integrations → Add Discord
  4. Paste the webhook URL and save
P

Pushover

  1. Create a Pushover account and install the app
  2. Create an Application in Pushover to get an API Token
  3. In CronRabbit, add a Pushover integration with your User Key and API Token
  4. Receive push notifications on your phone

Custom Webhook

Send alerts to any HTTP endpoint. Perfect for PagerDuty, OpsGenie, or custom automation.

Webhook Payload:
{
  "monitor_id": "abc123...",
  "monitor_name": "Database Backup",
  "status": "down",
  "environment": "Production",
  "timestamp": "2026-01-29T10:00:00Z"
}

Webhooks are signed with HMAC-SHA256. Verify the X-CronRabbit-Signature header to authenticate.

Public Status Pages

Keep your users informed with beautiful, customizable public status pages. Share real-time uptime health for your monitors and environments.

Creating a Status Page

1. Navigate to Workspaces → Status Pages in your dashboard.
2. Click Create Status Page.
3. Give your page a name and a custom slug (e.g., cronrabbit.com/s/your-company).

Customization Options

  • Branding: Upload your company logo and customize page titles.
  • Visibility: Select exactly which monitors or whole environments to display.
  • Uptime History: Automatically show 90-day uptime history and incident logs.

Public Transparency

Sharing your status page builds trust with your users. You can even use your own custom subdomain on Pro and Enterprise plans.

Environment Icons & Visualization

CronRabbit automatically assigns distinct icons and colors to your environments based on their names. This helps you quickly distinguish between Production, Staging, and Infrastructure at a glance.

KeywordIconColorRecommended For
prodEmeraldLive production environments.
stagingAmberPre-release / Staging clusters.
testVioletQA, testing, and CI environments.
infraBlueKubernetes, Docker, or Cloud infra.
serverSlateBare metal or virtual servers.
rabbitOrangeCronRabbit internal or SaaS tools.
db, dataCyanDatabases and storage services.
defaultIndigoGeneric environments.

Pro Tip: Heartbeat Visuals

Monitors in your sidebars also use vibrant "heartbeat" icons that pulse with status colors. UP monitors show a sharp Emerald beat, while LATE or DOWN monitors transition to Amber and Red.

Cron Expression Reference

CronRabbit uses standard 5-field cron expressions.

*
Minute
(0-59)
*
Hour
(0-23)
*
Day
(1-31)
*
Month
(1-12)
*
Weekday
(0-6)

Common Examples

ExpressionDescription
* * * * *Every minute
*/5 * * * *Every 5 minutes
0 * * * *Every hour (at minute 0)
0 2 * * *Daily at 2:00 AM
0 0 * * 0Weekly on Sunday at midnight
0 0 1 * *Monthly on the 1st at midnight
0 9-17 * * 1-5Hourly during business hours (Mon-Fri, 9AM-5PM)

Ready to Start Monitoring?

Create your free account and add your first monitor in under 5 minutes.