← Back to blog
cronsafe

Cronhub Alternative: Migrate to CronSafe in 5 Minutes Before the Shutdown

Cronhub is shutting down May 31, 2026. This migration guide shows you how to switch to CronSafe as your Cronhub alternative in under 5 minutes.

cron monitoringcronhub alternativecronsafemigration

Cronhub Alternative



Cronhub announced it is shutting down on May 31, 2026. If you rely on Cronhub to monitor scheduled tasks, you have a hard deadline to migrate. Ignoring it means your cron jobs will run unmonitored, failures will go unnoticed, and incidents will compound silently. This guide walks you through migrating every monitor from Cronhub to CronSafe in five minutes or less, with zero downtime and no code rewrites. We will cover the exact API changes, show working code in bash, Python, and Node.js, and compare what you are gaining (and losing) in the switch.

Why Cronhub Is Shutting Down



Cronhub served the developer community well for years, but the team decided to sunset the product. The official shutdown date is May 31, 2026. After that date, all endpoints stop responding, dashboards go offline, and alert integrations stop firing. There is no "read-only" mode. It is a complete shutdown.

If you are reading this after the deadline, your Cronhub pings are already failing silently. That is the worst kind of monitoring failure: you think you are covered, but nothing is watching.

What CronSafe Does Differently



CronSafe is a dead man's switch monitoring service built by Luxkern. The core idea is identical to Cronhub: your cron job pings an endpoint on success, and if the ping does not arrive within the expected window, CronSafe alerts you via email, Slack, webhook, or SMS.

Here is what sets CronSafe apart:

  • Unlimited monitors on Pro (EUR 9/month) -- Cronhub charged per monitor, which got expensive fast when you had dozens of jobs across staging and production.
  • Free tier with 20 monitors -- enough for most side projects and small teams.
  • Sub-second latency on ping ingestion -- pings are acknowledged in under 200ms globally.
  • Built-in grace periods -- configure per-monitor tolerance for jobs that sometimes run a few seconds late.
  • Multi-channel alerting -- email, Slack, Discord, Microsoft Teams, webhooks, and SMS from a single dashboard.
  • No vendor lock-in -- standard HTTP ping protocol; switching away is as simple as changing a URL.


  • Migration Step-by-Step



    The migration has three phases: create monitors in CronSafe, update your ping URLs, and verify.

    Phase 1: Create Your Monitors



    Log in to CronSafe and create a monitor for each Cronhub monitor you have. For every monitor, you will get a unique ping URL that looks like this:

    https://ping.cronsafe.luxkern.com/m/<MONITOR_ID>


    Copy this URL. You will use it to replace the Cronhub ping URL in your cron jobs.

    Set the schedule to match your existing Cronhub configuration. CronSafe accepts standard cron expressions (*/5 * * * *) as well as human-readable intervals ("every 5 minutes"). Configure the grace period based on how variable your job's execution time is. A good default is 2 minutes for jobs running every hour, and 30 seconds for jobs running every minute.

    Phase 2: Update Your Ping URLs



    This is where the actual migration happens. You need to replace every occurrence of your Cronhub ping URL with the new CronSafe URL. Here are working examples in three languages.

    Bash (crontab with curl)



    Your current Cronhub crontab entry probably looks like this:

    # Old Cronhub ping
    */5 * * * * /usr/local/bin/backup.sh && curl -fsS --retry 3 https://cronhub.io/ping/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

    New CronSafe ping

    */5 * * * * /usr/local/bin/backup.sh && curl -fsS --retry 3 https://ping.cronsafe.luxkern.com/m/YOUR_MONITOR_ID


    The -fsS flags ensure curl fails silently on HTTP errors but still shows errors on connection failures. The --retry 3 flag gives you resilience against transient network issues. The && operator ensures the ping only fires if the backup script exits with code 0.

    You can also report failures explicitly:

    */5 * * * * /usr/local/bin/backup.sh && curl -fsS https://ping.cronsafe.luxkern.com/m/YOUR_MONITOR_ID || curl -fsS https://ping.cronsafe.luxkern.com/m/YOUR_MONITOR_ID/fail


    This way, CronSafe knows immediately when your job fails instead of waiting for the grace period to expire.

    Python (requests library)



    If your scheduled task is a Python script, replace the Cronhub ping at the end of your main function:

    import requests
    import sys

    CRONSAFE_PING_URL = "https://ping.cronsafe.luxkern.com/m/YOUR_MONITOR_ID"

    def run_etl_pipeline(): """Your actual scheduled work.""" # ... ETL logic here ... print("ETL pipeline completed successfully.")

    def main(): try: run_etl_pipeline() # Ping CronSafe on success response = requests.get(CRONSAFE_PING_URL, timeout=10) response.raise_for_status() print(f"CronSafe ping sent: {response.status_code}") except Exception as e: # Ping the failure endpoint so CronSafe alerts immediately requests.get(f"{CRONSAFE_PING_URL}/fail", timeout=10) print(f"Job failed: {e}", file=sys.stderr) sys.exit(1)

    if __name__ == "__main__": main()


    The pattern is the same: hit the base URL on success, hit /fail on failure. CronSafe accepts GET, POST, and HEAD requests, so you do not need to change your HTTP method.

    Node.js (fetch API)



    For Node.js scheduled tasks (whether you use node-cron, Bull, or a simple setInterval):

    const CRONSAFE_PING_URL = "https://ping.cronsafe.luxkern.com/m/YOUR_MONITOR_ID";

    async function processQueue() { // ... your job logic ... console.log("Queue processed successfully."); }

    async function main() { try { await processQueue();

    // Ping CronSafe on success const res = await fetch(CRONSAFE_PING_URL, { method: "GET", signal: AbortSignal.timeout(10000), });

    if (!res.ok) { console.error(CronSafe ping failed with status ${res.status}); } } catch (error) { // Report failure to CronSafe await fetch(${CRONSAFE_PING_URL}/fail, { method: "GET", signal: AbortSignal.timeout(10000), }).catch(() => {}); // swallow errors on the fail ping itself

    console.error("Job failed:", error); process.exit(1); } }

    main();


    Native fetch is available in Node.js 18+ with no dependencies. If you are on an older version, swap in node-fetch or axios.

    Phase 3: Verify the Migration



    After updating your ping URLs, trigger each job manually and confirm that CronSafe receives the ping. The CronSafe dashboard shows a real-time event log per monitor. You should see a green "Ping received" event within seconds.

    Then wait for the next scheduled run. If you configured alerts, test them by pausing one monitor's ping and waiting for the grace period to expire. You should receive an alert on your configured channel.

    Once every monitor shows healthy pings, go back to Cronhub and delete your monitors there. Do not leave orphaned monitors running in both services; it creates confusion when debugging.

    Ready to migrate? Try CronSafe -- it takes less time than reading this section.



    Feature Comparison: Cronhub vs CronSafe



    | Feature | Cronhub | CronSafe | |---|---|---| | Ping monitoring | Yes | Yes | | Failure endpoint | No | Yes (/fail) | | Grace periods | Yes | Yes (per-monitor) | | Cron expression validation | Yes | Yes | | Email alerts | Yes | Yes | | Slack integration | Yes | Yes | | Discord integration | No | Yes | | Webhook alerts | Yes | Yes | | SMS alerts | Paid add-on | Included in Pro | | Free tier | 1 monitor | 20 monitors | | Paid pricing | $7/monitor/month | EUR 9/month unlimited | | API for managing monitors | Yes | Yes (REST + SDK) | | Multi-team support | No | Yes (Pro) | | Status after May 2026 | Shut down | Active |

    The biggest practical difference is pricing. If you monitored 10 jobs on Cronhub, you paid $70/month. On CronSafe Pro, you pay EUR 9/month for unlimited monitors. On the free tier, 20 monitors costs you nothing.

    Pricing Breakdown



    Let us put real numbers on the table.

    Cronhub (before shutdown):
  • $7 per monitor per month
  • 10 monitors = $70/month = $840/year
  • 50 monitors = $350/month = $4,200/year


  • CronSafe:
  • Free: 20 monitors, email alerts, 1-minute check interval
  • Pro (EUR 9/month): unlimited monitors, all alert channels, 30-second check interval, team access
  • Enterprise: custom pricing, SLA, dedicated support


  • For most teams, the free tier covers staging and development environments entirely, and Pro covers production. The math is not close.

    Common Migration Pitfalls



    1. Forgetting the trailing slash. CronSafe ping URLs do not require a trailing slash, but some HTTP clients add one. Both https://ping.cronsafe.luxkern.com/m/ID and https://ping.cronsafe.luxkern.com/m/ID/ work.

    2. Not updating all environments. Check staging, CI, and development crontabs too. If those still point to Cronhub, they will fail silently after the shutdown.

    3. Hardcoded URLs. If your Cronhub URL is hardcoded in multiple places, consider using an environment variable like CRON_PING_URL so future migrations are a single config change.

    export CRON_PING_URL="https://ping.cronsafe.luxkern.com/m/YOUR_MONITOR_ID"

    In your crontab or script:

    curl -fsS "$CRON_PING_URL"


    4. Ignoring timeout settings. If your HTTP client has a very short timeout (e.g., 1 second), pings might fail on slower networks. Set timeouts to 10 seconds minimum.

    5. Not testing failure alerts. Migrate, then deliberately break one job. Confirm you get the alert. Monitoring that you never validate is decoration, not protection.

    What About Cronitor, Healthchecks.io, and Others?



    Cronitor is a solid product, but it charges $20/monitor/month on its standard plan. If you are price-sensitive, CronSafe is significantly cheaper. For a detailed feature comparison, read our CronSafe vs Cronitor breakdown.

    Healthchecks.io is open-source and free for self-hosting, but that means you own the infrastructure, uptime, and alerting pipeline. If you want a managed service without the ops burden, CronSafe is the better fit.

    Dead Man's Snitch charges $6/monitor/month. Better than Cronitor, but still adds up. CronSafe's flat-rate pricing makes budgeting predictable.

    Automating the Migration with a Script



    If you have many monitors, you can script the migration using the CronSafe API:

    #!/bin/bash
    

    migrate-cronhub-to-cronsafe.sh

    Requires: CRONSAFE_API_KEY environment variable



    API_BASE="https://api.cronsafe.luxkern.com/v1"

    Array of your monitors: "name|cron_expression|grace_seconds"

    MONITORS=( "db-backup|0 */6 * * *|300" "email-queue|*/5 * * * *|120" "cache-warm|0 0 * * *|600" "report-gen|0 8 * * 1|900" )

    for monitor in "${MONITORS[@]}"; do IFS='|' read -r name cron grace <<< "$monitor" response=$(curl -s -X POST "$API_BASE/monitors" \ -H "Authorization: Bearer $CRONSAFE_API_KEY" \ -H "Content-Type: application/json" \ -d "{ \"name\": \"$name\", \"schedule\": \"$cron\", \"grace_seconds\": $grace }") ping_url=$(echo "$response" | jq -r '.ping_url') echo "Created monitor '$name': $ping_url" done


    Run this once, collect the ping URLs, and do a find-and-replace across your infrastructure.

    After the Migration: Monitoring Best Practices



    Once you are on CronSafe, adopt these habits from the start:

  • Use descriptive monitor names. "backup" is bad. "prod-db-backup-daily-6h" tells you exactly what failed when the alert fires at 3 AM.


  • Set appropriate grace periods. If your job normally takes 2-10 minutes, set a 15-minute grace period. Too tight and you get false alerts; too loose and you miss real failures.


  • Ping on both success and failure. The /fail endpoint gives you instant alerts instead of waiting for the grace period. Use it.


  • Monitor your monitors. Check the CronSafe dashboard weekly. Look for monitors that have not received a ping in a while -- they might indicate disabled jobs you forgot about.


  • Use environment variables for ping URLs. Makes the next migration (if any) trivial. Read our guide on how to monitor cron jobs for more patterns and best practices.


  • Conclusion



    Cronhub is gone after May 31, 2026. The migration to CronSafe is straightforward: create monitors, swap URLs, verify pings. The whole process takes less time than your next standup.

    CronSafe gives you more monitors for less money, faster alerting, and the peace of mind that your monitoring provider is actively maintained and growing.

    Try CronSafe free -- no credit card required.