RemarkableCloud

Disable WP-Cron and Set Up a Real Cron Job

How to disable WordPress's unreliable pseudo-cron system and replace it with a real server cron job for faster, more consistent scheduled task execution.

WordPress ships with a pseudo-cron system called WP-Cron. Instead of running on a real schedule, it piggybacks on page visits: every time someone loads a page, WordPress checks whether any scheduled tasks are due and runs them. On low-traffic sites tasks can be delayed for hours. On high-traffic sites every page load triggers the check, adding unnecessary overhead. Replacing it with a real server cron job fixes both problems.

Why WP-Cron is problematic

ProblemCause
Scheduled posts publish lateNo visitors = no cron runs
Backup plugins run at wrong timeDepends on traffic pattern
Email delaysSame dependency on page loads
Slow page loads on busy sitesEvery request triggers a cron check
Plugin update checks lagNo guaranteed execution interval

A real cron job runs on a precise schedule regardless of traffic, executes in a dedicated PHP process, and doesn’t add latency to any page request.

Step 1: Disable WP-Cron in wp-config.php

Open wp-config.php in your WordPress root directory and add this line before the /* That's all, stop editing! */ comment:

define( 'DISABLE_WP_CRON', true );

Full context:

// Disable the built-in pseudo-cron: we use a real server cron instead
define( 'DISABLE_WP_CRON', true );

/* That's all, stop editing! Happy publishing. */

Save the file. WordPress no longer runs scheduled tasks on page load from this point forward.

If you disable WP-Cron without immediately adding a server cron job, scheduled tasks stop running entirely: no backups, no emails, no scheduled posts. Complete both steps before testing.

Step 2: Add a server cron job

In cPanel

  • Log into cPanel and go to Advanced → Cron Jobs.
  • Under Add New Cron Job, set the frequency to Once Per Minute (select the first option in the common settings dropdown).
  • In the Command field, enter: ```bash php /home/USERNAME/public_html/wp-cron.php ``` Replace USERNAME with your cPanel username and adjust the path if WordPress is in a subdirectory.
  • Click Add New Cron Job.
  • In DirectAdmin

  • Log into DirectAdmin and go to Extra Features → Cron Jobs.
  • Set the minute field to * (every minute) and leave hour, day, month, weekday as *.
  • Enter the command: ```bash php /home/USERNAME/domains/yourdomain.com/public_html/wp-cron.php ```
  • Click Save.
  • Via SSH (any server)

    # Open the crontab editor
    crontab -e
    
    # Add this line: runs wp-cron.php every minute
    * * * * * php /home/USERNAME/public_html/wp-cron.php > /dev/null 2>&1

    Save and exit. Verify it was added:

    crontab -l

    Finding the correct PHP binary

    Using php in the command relies on the system’s default PHP version, which may not match what your WordPress site uses. To use a specific PHP version:

    # Find available PHP binaries on a cPanel server
    ls /usr/local/bin/php*
    
    # Example output:
    # /usr/local/bin/php   (symlink to default)
    # /usr/local/bin/php81
    # /usr/local/bin/php82
    # /usr/local/bin/php83

    Use the full path to match your site’s PHP version:

    # For PHP 8.2
    * * * * * /usr/local/bin/php82 /home/USERNAME/public_html/wp-cron.php > /dev/null 2>&1
    Using a different PHP version for the cron than the site itself can cause plugin compatibility issues. Check your site's PHP version in cPanel → MultiPHP Manager and use the matching binary.

    Using WP-CLI instead of php directly

    If WP-CLI is installed on your server (it is on all RemarkableCloud managed servers), use it instead: it handles the WordPress bootstrap more cleanly:

    * * * * * cd /home/USERNAME/public_html && wp cron event run --due-now > /dev/null 2>&1

    WP-CLI automatically uses the correct PHP version for the site and outputs cleaner logs.

    Check if WP-CLI is available:

    wp --info

    How often should cron run?

    Every minute is the standard recommendation and matches WordPress’s own internal schedule (WP-Cron checks every minute when triggered). Running it less frequently means some tasks fire late.

    FrequencyCron expressionSuitable for
    Every minute* * * * *Recommended: matches WP schedule
    Every 5 minutes*/5 * * * *Acceptable for low-priority tasks
    Every 15 minutes*/15 * * * *Not recommended: delays backups and emails

    Verifying cron is working

    Check with WP-CLI

    cd /home/USERNAME/public_html
    wp cron event list

    This shows all scheduled events with their next run time. If DISABLE_WP_CRON is set but no server cron is running, events will show as overdue.

    Check with a plugin

    Install WP Crontrol from the WordPress plugin directory. It shows all scheduled cron events, when they last ran, and lets you manually trigger them for testing.

    Check the cron log

    Add logging to your cron command to confirm it’s executing:

    * * * * * /usr/local/bin/php82 /home/USERNAME/public_html/wp-cron.php >> /home/USERNAME/logs/wp-cron.log 2>&1

    Then check the log:

    tail -f /home/USERNAME/logs/wp-cron.log

    You should see output every minute. An empty log after a few minutes means the cron isn’t firing: double-check the file path and PHP binary.

    Multiple WordPress installs

    If you run several WordPress sites on the same server, add a cron line for each:

    * * * * * /usr/local/bin/php82 /home/USER/public_html/wp-cron.php > /dev/null 2>&1
    * * * * * /usr/local/bin/php82 /home/USER/public_html/shop/wp-cron.php > /dev/null 2>&1
    * * * * * /usr/local/bin/php82 /home/USER2/public_html/wp-cron.php > /dev/null 2>&1

    Or use a single WP-CLI loop if all sites share the same user:

    * * * * * for dir in /home/USERNAME/public_html /home/USERNAME/public_html/shop; do cd $dir && wp cron event run --due-now; done > /dev/null 2>&1
    LiteSpeed Cache's image optimization and cache warmup tasks run via WP-Cron. With a real cron in place these jobs run on schedule: image optimization queues process faster and cache stays warm consistently.

    Next steps

    Still stuck? Ask a human, we answer in minutes.