Forum Replies Created

Viewing 5 replies - 1 through 5 (of 5 total)
  • The date on that hook is the useful part. mailpoet/cron/daemon-trigger last ran on 22 July, so whatever broke, broke then — everything since is the backlog growing behind it.

    That hook is a self-rescheduling one: each run is what queues the next run. Nothing else re-arms it. So a single run that dies — a fatal, a timeout, a blocked request — stops the chain permanently, and nothing in the logs says “I have stopped”, because the thing that would have written the next entry is the thing that died. That is why it can sit for six weeks looking like a scheduling problem when it is really one failed run in July.

    Two things to separate first, because they have opposite fixes. Press Run on one past-due action in WooCommerce → Status → Scheduled Actions. If it completes, the jobs are fine and nothing is triggering the queue. If it errors, the job is broken — and your 6 failed are already that kind, so no cron change will clear those.

    Then re-arm MailPoet: MailPoet → Settings → Advanced → “Newsletter Task Scheduler”. MailPoet’s own troubleshooting for this is to set it to the WordPress built-in cron option. If it is currently on the server/Linux cron setting and that cron was changed or removed at some point, that matches exactly what you are seeing — a hard stop on one date and nothing since. Switching it makes MailPoet schedule a fresh trigger instead of waiting on the dead one.

    The database version mismatch you were told about is worth doing too, but it is separate — WooCommerce → Status → Tools → Update database. It will not restart MailPoet’s daemon.

    Your instinct about the WAF is probably right, and the reason it is hard to confirm is that nothing on the WordPress side gets an error to log.

    WP-Cron is not a timer. When somebody loads a page, WordPress fires a request from your server back to your own site at /wp-cron.php, and that second request is what runs the queue. It comes from your own server’s IP, carries no browser fingerprint, and hits a PHP file directly — close to the definition of a bot, so Bot Fight Mode, “I’m Under Attack” mode and most rate-limiting rules block it. The visitor’s page loads normally, the site looks healthy, and the queue never runs.

    Confirm it in one place: Tools → Site Health. A blocked loopback shows there as a failed loopback request. If loopback fails, nothing you do inside WooCommerce will fix the queue.

    If it is the WAF, use a skip rule rather than turning protection off. Cloudflare → Security → WAF → Custom rules, expression (http.request.uri.path eq “/wp-cron.php”), action Skip, and tick the managed rules and Bot Fight Mode.

    The better fix, if you have any shell access, is to stop using HTTP for this at all:

    define(‘DISABLE_WP_CRON’, true); // wp-config.php then, as a server cron every 5 minutes:

    cd /path/to/wordpress && wp cron event run –due-now

    WP-CLI runs the queue in PHP directly. No HTTP request, so no proxy, no WAF, no firewall, and no user agent for anything to judge. Most threads on this error that end without a resolution are people fighting the loopback request when they could have removed it.

    Worth knowing before you chase this on the mail side: subscriber notifications do not go out through your site’s own mail. Jetpack sends them from its servers, so SMTP settings, WP Mail SMTP and your host’s mail logs are all the wrong place to look — they will show nothing either way.

    What actually triggers the send is the post transitioning to published. Three things break that, in rough order of likelihood:

    1. The post was scheduled and published late by a missed-schedule recovery rather than at its scheduled moment. Posts that arrive that way frequently do not fire the notification.
    2. Jetpack → Settings → Newsletter has the subscription setting switched off, or the post was published while the connection was broken.
    3. The post is in a category or format excluded from notifications.

    Quickest test: publish a short post immediately, not scheduled, and see whether it goes out. If an immediate publish sends and a scheduled one does not, it is the missed-schedule path and the fix is a real cron rather than anything in Jetpack.

    The 40M memory limit is the thing to fix first, and “Processing 1, Completed 0” is the symptom that points at it.

    Action Scheduler claims an action before it runs it and releases the claim when it finishes. If PHP runs out of memory mid-run, the process dies without ever reaching the release — so the action is neither completed nor marked failed. It sits claimed. That is what “Processing 1, Completed 0” is showing you: not a stuck email, a run that was killed halfway.

    40M is very low for WooCommerce plus MailPoet on PHP 8.1. In wp-config.php, above the “stop editing” line:

    define(‘WP_MEMORY_LIMIT’, ‘256M’);

    If that does not stick, LiteSpeed hosts often cap PHP separately — check the value shown in Tools → Site Health → Info → Server, not just what you set.

    The subscriber landing in two lists is a separate thing and worth solving separately; it will not stop the automation from sending.

    You have two separate problems in that list, and they need opposite fixes — worth splitting them before you change anything.

    Go to WooCommerce → Status → Scheduled Actions and press Run on one past-due action. If it completes, the job itself is fine and nothing is triggering the queue automatically — that is a scheduling problem. If it errors, the job is broken and no amount of cron work will help.

    Your failed ones are already the second kind. Open the Failed tab: it names the hook, and the hook name tells you which plugin owns it. That is the one to chase, because failed actions never retry on their own.

    For the past-due ones, the moderator is right that it is usually loopback. WP-Cron works by your server making an HTTP request back to your own site at /wp-cron.php; if a firewall, a security plugin or your host blocks that, the queue silently never runs. Tools → Site Health names a failed loopback request explicitly.

    Do not bulk-delete the 97. Deleting them removes the evidence and the jobs still never ran.

Viewing 5 replies - 1 through 5 (of 5 total)