> ## Documentation Index
> Fetch the complete documentation index at: https://docs.mainwp.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Manage WP Cron on a Low-Traffic MainWP Dashboard

> Understand MainWP cron warnings and keep scheduled tasks reliable on low-traffic sites with external triggers or server cron jobs.

MainWP Dashboard sites are often private and receive little traffic. Since WP Cron depends on incoming requests, scheduled actions can be delayed unless you trigger cron regularly.

## What You'll Learn

* Why low traffic affects scheduled MainWP tasks
* How to interpret Dashboard and child-site cron warnings
* How to set up Option 1 with external uptime monitoring or server cron requests
* How to troubleshoot cron-triggering issues from one page

***

## Why cron can become unreliable

[WP Cron](https://developer.wordpress.org/plugins/cron/) runs when requests hit the site. On low-traffic Dashboard sites, scheduled hooks may run late or not run at all.

MainWP includes minute-level, hourly, and daily schedules. If cron is not triggered often enough, update checks, sync-related processing, uptime checks, and scheduled emails can be delayed.

***

## Understand Cron Warnings

Starting with MainWP Dashboard 6.2, cron monitoring runs automatically. You do not need to enable Custom Event Monitor. Keep MainWP Dashboard and MainWP Child updated to receive child-site reports.

An overdue warning can appear when the scheduled monitoring check has not run for more than **15 minutes**. It signals that scheduled work may be delayed; it does not check whether every individual task completed successfully.

| Notice                                                | Meaning and location                                                                                                                                |
| ----------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Scheduled tasks have not run recently.**            | The Dashboard's scheduled monitoring check is overdue. The notice appears above the widgets on **Operations**.                                      |
| **Child site scheduled tasks have not run recently.** | A child site reported an overdue check. The notice appears above the widgets on that site's **Overview** and is updated when you sync the site.     |
| **The "Use WP-Cron" setting is disabled.**            | MainWP's **Use WP Cron** setting is off. This is a reminder on **Operations** to configure external jobs, not evidence that those jobs have failed. |

This example shows a warning about a child site:

<img src="https://mintcdn.com/mainwp/N-QB2Zp0IJ5jmEu0/images/dashboard/child-site-cron-warning-dark.svg?fit=max&auto=format&n=N-QB2Zp0IJ5jmEu0&q=85&s=92b3629fc474620a785cfa3ed9d300ca" alt="Child-site Overview displaying an overdue scheduled-tasks warning and Learn more link in MainWP Dashboard dark mode" width="745" height="136" data-path="images/dashboard/child-site-cron-warning-dark.svg" />

### Respond to an Overdue Warning

<Steps>
  <Step title="Identify which site needs attention">
    A warning on **Operations** concerns the Dashboard site. A warning that names child-site scheduled tasks concerns the child site whose **Overview** you are viewing. Check scheduling on the affected site's host.
  </Step>

  <Step title="Check the cron trigger">
    If the message says WP-Cron is disabled, verify that the site's external cron job is running. Disabling WordPress's page-triggered cron is valid when a reliable external runner is configured.

    Otherwise, check whether low traffic, a failed external trigger, or an access restriction is preventing cron execution. For the Dashboard, use the setup instructions below and the [troubleshooting checklist](#troubleshooting-option-1).
  </Step>

  <Step title="Verify recovery">
    After correcting the trigger, allow scheduled monitoring to run again and refresh the page. Check the Dashboard's task activity at **MainWP > Info > Cron Schedules**.

    For a child site, sync it again after its monitoring check has recovered so the Dashboard receives the updated report. See [Child Site Cron Warnings](/sites/management/manage-child-sites#child-site-cron-warnings) for the site-specific steps.
  </Step>
</Steps>

### Dismissal and the Disabled-Cron Reminder

You can dismiss a Dashboard notice with its close icon. This hides the current incident for your user account; it does not fix scheduling. After MainWP detects recovery, a later occurrence can show a new notice. Child-site warnings have no dismiss control and clear from the Dashboard when a subsequent sync reports recovery.

If **Use WP Cron** is intentionally disabled for [direct-worker mode](/customization/disable-wp-cron), verify that all required server jobs are configured. MainWP skips the Dashboard's overdue WP-Cron check in this mode and shows the disabled-setting reminder instead. The reminder does not verify the individual external jobs. For the recommended setup below, keep **Use WP Cron** enabled.

***

## Option 1 (Recommended): Keep `Use WP Cron` enabled and trigger it externally

This is the default approach for most users and the main setup this article recommends.

### Important distinction (avoid confusion)

* Keep **Use WP Cron** enabled at **MainWP > Settings > Advanced Settings**
* For this option, "uptime monitoring" means **external third-party services** sending requests to your Dashboard URL
* Do not rely on MainWP's own uptime monitoring features to trigger WP Cron on the Dashboard site itself
* WordPress's `DISABLE_WP_CRON` setting controls automatic spawning from normal page requests; it does not remove registered events or block direct requests to `wp-cron.php`

<Note>
  MainWP uptime monitoring is for monitoring Child Sites. It is not a replacement for external cron-trigger requests to your Dashboard URL.
</Note>

### Method A: External uptime monitoring (no server cron needed)

Use an external service to send regular `GET` requests to your MainWP Dashboard URL.

Examples of external services:

* Uptime Robot
* Better Uptime
* Pingdom
* StatusCake

<Steps>
  <Step title="Create a monitor in an external service">
    Create a new HTTP(s) monitor in your chosen service.
  </Step>

  <Step title="Set the target URL">
    Start with your Dashboard homepage:

    ```text theme={null}
    https://example.com/
    ```
  </Step>

  <Step title="Set request method and interval">
    Use `GET` and set the check interval to **every minute**.
  </Step>

  <Step title="Save and activate the monitor">
    Make sure the monitor is active and running continuously.
  </Step>

  <Step title="Verify requests are reaching WordPress">
    If cron does not update in MainWP Cron Schedules, switch the monitor URL to:

    ```text theme={null}
    https://example.com/wp-cron.php?doing_wp_cron
    ```
  </Step>
</Steps>

### Method B: Server cron request (hosting panel or server)

If you prefer host-level scheduling, configure a cron job that calls `wp-cron.php`.

Most users set this up in:

* cPanel `Cron Jobs`
* Plesk `Scheduled Tasks`
* SSH `crontab`

Use this command:

```bash theme={null}
* * * * * curl -fsS https://example.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1
```

Practical notes:

* Replace `https://example.com` with your MainWP Dashboard URL
* Keep **Use WP Cron** enabled for Option 1
* Ensure auth/firewall/security rules do not block the request

### Choose the correct `DISABLE_WP_CRON` setting

The correct `wp-config.php` setting depends on which URL or command triggers the cron queue:

| External trigger                                                          | `DISABLE_WP_CRON` setting                                                                                                                   |
| ------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| Requests to the Dashboard homepage or another normal page                 | Leave undefined or set to `false`. This method needs normal page requests to spawn WP-Cron.                                                 |
| Direct requests to `wp-cron.php?doing_wp_cron`                            | Set to `true` after verifying that the external trigger runs reliably. Direct requests to the cron endpoint continue to process due events. |
| A server scheduler that runs `wp cron event run --due-now` through WP-CLI | Set to `true` after verifying that the scheduler runs reliably. WP-CLI processes the due registered events without relying on page visits.  |

For a reliable direct `wp-cron.php` or WP-CLI trigger, add:

```php theme={null}
define( 'DISABLE_WP_CRON', true );
```

This prevents ordinary page visits from also spawning WP-Cron. Do not enable it when homepage or normal-page requests are the only external trigger, or when no reliable external runner is configured.

### Trigger frequency (Option 1)

Set the trigger to **every minute** for both Method A and Method B.

MainWP registers minute-level cron hooks. Slower intervals introduce avoidable delays for scheduled actions.

***

## Option 2 (Advanced): Disable `Use WP Cron` and run server cron jobs directly

Use this only if you want to maintain manual MainWP cron jobs yourself. For commands and full setup details, follow [Disable WP Cron](/customization/disable-wp-cron).

***

## Troubleshooting Option 1

### Quick checklist

* **Use WP Cron** is enabled at **MainWP > Settings > Advanced Settings**
* External monitor or server cron is active and running every minute
* Target URL is reachable (`https://example.com/` or `https://example.com/wp-cron.php?doing_wp_cron`)
* `DISABLE_WP_CRON` matches the trigger method: undefined or `false` for homepage requests, or `true` only with a reliable direct `wp-cron.php` or WP-CLI runner
* No HTTP auth, firewall, CDN, or WAF rule is blocking requests
* Cron activity is updating at **MainWP > Info > Cron Schedules**

### Symptom to cause to fix

| Symptom                                                    | Likely cause                                        | Fix                                                                     |
| ---------------------------------------------------------- | --------------------------------------------------- | ----------------------------------------------------------------------- |
| `Last Run` does not change for long periods                | Trigger requests are not reaching WordPress         | Validate monitor/cron logs and switch to direct `wp-cron.php` URL       |
| `Next Run` looks stale or missing                          | Scheduling is disabled or misconfigured             | Re-enable **Use WP Cron**, save settings, and recheck                   |
| External monitor says "up" but cron is still stale         | Homepage check is cached or not executing WordPress | Point monitor to `wp-cron.php?doing_wp_cron`                            |
| Homepage monitor says "up" and `DISABLE_WP_CRON` is `true` | Normal page requests cannot spawn WP-Cron           | Point the monitor to `wp-cron.php?doing_wp_cron`, or remove the setting |
| `401` or `403` when calling `wp-cron.php`                  | Auth, firewall, or WAF restriction                  | Allow request access for the cron endpoint                              |
| Inconsistent or duplicate behavior                         | Mixed cron modes are configured                     | Keep Option 1 clean: external trigger + **Use WP Cron** enabled         |

## Final recommendation

For most MainWP Dashboard installations:

* Keep **Use WP Cron** enabled
* Use Method A or Method B to trigger WordPress every minute
* Switch to server cron-only mode only when you can maintain the full cron setup

***

## Related Resources

* [Disable WP Cron](/customization/disable-wp-cron)
* [How to Change Daily Update and Sync Frequency](/sites/updates/how-to-change-daily-update-and-sync-frequency)
