WP-Cron Remediation Playbook

Use this runbook when Site Health reports late scheduled events (e.g., jetpack_sync_cron) or when WooCommerce automations stop firing.

1. Confirm the symptom

Site Health

Visit https://www.renewed-renaissance.com/wp-admin/site-health.php. Look for warnings such as "A scheduled event is late".

WP-CLI cron listing

cd /mnt/SSD1/mrepos/bitbucket.org/wilsonify/renewed-renaissance-woocommerce
docker compose run --rm wordpress \
  wp cron event list --fields=hook,next_run,recurrence --format=table

Hooks with next_run timestamps in the past are overdue.

Action Scheduler queue (WooCommerce)

docker compose run --rm wordpress wp action-scheduler list --status=pending --per-page=20

A large pending backlog indicates workers aren't running.

2. Run all due events

docker compose run --rm wordpress wp cron event run --due-now

3. Target specific hooks

docker compose run --rm wordpress wp cron event run jetpack_sync_cron

For hooks with multiple scheduled instances, include --all:

docker compose run --rm wordpress wp cron event run jetpack_sync_cron --all

4. Re-scan the schedule

docker compose run --rm wordpress \
  wp cron event list --fields=hook,next_run,recurrence --format=table

Healthy hooks should show next-run timestamps in the future.

5. Validate in Site Health

Reload the Site Health page. Warnings about late cron jobs usually clear within one page refresh.

6. Common causes & fixes

CauseDiagnosticFix
No traffic hitting wp-cron.php next_run stays in the past Set DISABLE_WP_CRON to false or run wp cron event run --due-now via host cron.
Action Scheduler stuck wp action-scheduler list shows hundreds of pending rows Manually run wp action-scheduler run.
Hook throws fatal error docker compose logs wordpress shows PHP fatal during cron Fix the code/plugin causing the fatal, then rerun the event.
Jetpack sync disabled Jetpack not connected or site private Reconnect Jetpack via wp-admin/admin.php?page=jetpack#/dashboard.

7. Automating prevention