Diagnosing WooCommerce Background Job Stalls with Action Scheduler
Learn how to diagnose and fix WooCommerce background job stalls using the Action Scheduler queue, with step‑by‑step checks, fixes, and escalation guidance.
19 Nov 2025, 17:42 UTC

Recognizable Condition
Order confirmation emails arrive late or never, order statuses stay Pending/Processing after a successful payment, subscription renewals or low‑stock notices do not fire, while the storefront and checkout continue to work normally. This pattern points to a stalled background queue rather than a broken checkout.
Cause/Diagnostic Table
| Possible cause | What you see in the queue |
|---|---|
| WP‑Cron is not running | Thousands of actions with status Pending, none In‑progress |
| A fatal PHP error in a job callback | Actions marked Failed; the log shows the hook, callback and error message |
| Job batches exceed PHP time or memory limits | Queue crawls; many actions linger In‑progress for extended periods |
| The host blocks loopback requests | WP‑Cron fires but the runner never completes; Pending count does not decrease |
| A sudden flood of jobs after a bulk import or migration | Very high Pending count that is still slowly advancing |
Ordered Checks
- Open WooCommerce → Tools → Scheduled Actions. Filter by status (Pending, Failed, In‑progress) and sort by the scheduled date to gauge queue depth and see whether any item is currently In‑progress.
- Open a Failed action from the list and read its log. Note the hook name, the owning plugin or theme, and the error message.
- Check WooCommerce → Status → Logs for recent WooCommerce entries and review the server PHP error log for any fatal errors that coincide with the timestamps of Failed actions.
- Verify that WP‑Cron is actually firing. Install the WP Crontrol plugin and look for the recurring “action_scheduler/run_queue” event, or inspect the system cron log for calls to wp‑cron.php.
- Confirm the PHP execution time and memory limits shown in WooCommerce → Status → Environment. If they are low, note them as a potential bottleneck.
Fixes Tied to Findings
- Dead WP‑Cron: Replace reliance on traffic with a server‑level cron that calls wp‑cron.php every minute. Example line to add to the system crontab:
* * * * * wget -q -O - https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
After saving, check the system cron log to confirm the job runs and watch Tools → Scheduled Actions for Pending items moving to In‑progress and then Complete. - Fatal callback error: Identify the offending hook/plugin from the Failed action’s log. Fix the code or temporarily deactivate the plugin/theme, then use the “Run” link on the action to retry. Verify that the action’s status changes to Complete and that no new errors appear in the log.
- PHP time or memory limits: Increase the limits in your server’s PHP configuration (php.ini, .htaccess, or hosting control panel) or lower the Action Scheduler batch size via the provided filter. After the change, observe the queue; actions should spend less time In‑progress and complete more quickly.
- Blocked loopback requests: Ask the host to allow localhost loopbacks or set up a CLI cron entry, for example:
* * * * * /usr/local/bin/php /path/to/wordpress/wp-cron.php >/dev/null 2>&1
Confirm with WP Crontrol that the runner event fires and that the queue begins to drain. - Job flood after bulk import: Monitor the queue; it should gradually drain. If it stalls despite normal cron, revisit the previous checks for cron or resource limits.
Escalation Criteria
- Escalate to the hosting provider when the WP Crontrol plugin shows the runner event firing but the queue never advances (indicating loopback or firewall blocks) or when you cannot raise PHP limits on a shared environment.
- Escalate to the extension vendor when a specific action repeatedly fails; provide the hook name, the arguments, and the error log from the Failed action.
- Escalate to WooCommerce support when core WooCommerce actions fail consistently after disabling all other plugins and switching to a default theme on a staging copy.
Limitation: Menu labels and default statuses can vary between WooCommerce releases; always verify the exact wording in your installed version before following the steps.
Practical verification: After applying a fix, return to Tools → Scheduled Actions, filter for Pending and In‑progress, and confirm that the counts drop and that actions transition to Complete within a few minutes.
0 replies
A thoughtful contribution can make all the difference. Be the first to share one.