Cronjob.de › Guides › WordPress-Cron

Monitoring WordPress cron: is WP-Cron really running?

Scheduled posts, WooCommerce tasks, backup plugins: a lot in WordPress depends on WP-Cron. But it only runs when somebody opens the site – and whether it ran, nobody tells you by themselves. A heartbeat from inside WordPress checks in every hour; if it stops, WP-Cron has stalled.

Why at all

Why you would not notice otherwise

WP-Cron is not a real cron. On every page view WordPress checks whether a scheduled task is due and triggers it. If nobody comes by at night, a cache serves the page without starting WordPress, or a firewall blocks the internal call, the work is left undone.

WordPress lists late tasks under “Tools › Site Health” – but only when somebody looks. You get no message.

Two approaches complement each other well: have Cronjob.de trigger WP-Cron at a fixed interval, so it runs without visitors – covered in the guide Setting up a WordPress cronjob. And monitor it with a heartbeat, no matter who triggers it. That is what this page is about.

Ping address (example)
https://runcheck.de/a8k3m2x9q1
Schedule
WP-Cron on page views, from outside usually every 5 minutes
Applies to
WordPress 6.x, WP-CLI
Sufficient Cronjob.de plan
One heartbeat is free; you see its status in your account. Email alerts come with Plus (€17.88 a year), Slack, Teams and Discord with Unlimited.

Setup

Set up in three steps

What is a heartbeat?

A regular sign of life: after every run your job calls its own address at Cronjob.de. If the call is overdue or the job reports a failure, we alert you. More about heartbeats

  1. Create a heartbeat

    In your account, create a new one under “Heartbeats”, hourly, with one hour of leeway. You receive a ping address of its own, such as https://runcheck.de/a8k3m2x9q1.

  2. Add a must-use plugin

    Upload the file wp-content/mu-plugins/cronjob-heartbeat.php via FTP; if the mu-plugins folder does not exist, create it. Must-use plugins are always active. The plugin schedules an hourly WP-Cron task that checks in with Cronjob.de.

    <?php
    // wp-content/mu-plugins/cronjob-heartbeat.php
    // Checks in with Cronjob.de every hour via WP-Cron. If the check-in is missing, WP-Cron is not running.
    add_action( 'cronjob_de_heartbeat', function () {
        wp_remote_get( 'https://runcheck.de/a8k3m2x9q1', array( 'timeout' => 5 ) );
    } );
    add_action( 'init', function () {
        if ( ! wp_next_scheduled( 'cronjob_de_heartbeat' ) ) {
            wp_schedule_event( time(), 'hourly', 'cronjob_de_heartbeat' );
        }
    } );
  3. Open the site and wait

    Open your site once. With the next WP-Cron run the first check-in arrives, and “Waiting for the first check-in …” turns green in your account. With WP-CLI you can trigger it right away:

    wp cron event run cronjob_de_heartbeat

The ready-made lines for Linux, PHP, Python, Node.js, n8n, Make, Supabase and Vercel are on the page Cron job monitoring. Your own ping address appears in your account once you create the heartbeat, with the same lines ready to copy.

When something fails

What happens when a run fails

If the hourly check-in is missing, WP-Cron is not running – because no visitors came, a cache sits in front, a plugin blocks it or the site is down. After the leeway you get a message, and an all-clear as soon as WP-Cron runs again. That way you also know scheduled posts and shop tasks are no longer piling up.

FAQ

Common questions about WordPress-Cron

Is the cronjob that calls wp-cron.php not enough?
It makes sure WP-Cron gets triggered, and on the Unlimited plan we report when the call ends with an error. The heartbeat additionally tells you that the scheduled tasks inside are really processed. Using both, you notice both.
I trigger WP-Cron with WP-CLI on my own server. What does the line look like?
Append the check-in to the crontab line; WP-CLI's exit code goes along: */5 * * * * cd /var/www/html && wp cron event run --due-now --quiet; curl -fsS -m 10 --retry 3 https://runcheck.de/a8k3m2x9q1/$? > /dev/null. You then do not need the must-use plugin.
Does this work with WooCommerce too?
Yes. WooCommerce handles many tasks through the Action Scheduler, which is usually triggered by WP-Cron. If WP-Cron runs, so does the scheduler.

Set up your heartbeat now

One heartbeat is free; you see its status in your account. Email alerts come with Plus (€17.88 a year), Slack, Teams and Discord with Unlimited. The first 14 days run on the Unlimited plan, no payment details needed.

Set up a heartbeat for free More about heartbeats

More monitoring guides

Official documentation of WordPress-Cron

The details about WP-Cron come from the WordPress documentation, as of October 2026. WordPress is a trademark of the WordPress Foundation. This guide comes from Cronjob.de and has no business relationship with it.