WooCommerce / Performance
Problèmes d’Action Scheduler dans WooCommerce
Réponse courte
Action Scheduler est la file de tâches de fond utilisée par WooCommerce et de nombreuses extensions pour les webhooks, les e-mails, les renouvellements et les synchronisations. Les problèmes apparaissent sous forme d’actions en retard ou échouées dans Outils → Actions planifiées. Des actions en retard signifient que la file n’est pas traitée, généralement parce que WP-Cron ne s’exécute pas de façon fiable. Des actions échouées signifient que la tâche elle-même plante, et le journal de l’action explique pourquoi. Corrigez le runner ou le code en échec ; ne videz jamais les tables.
Symptômes
- Outils → Actions planifiées (aussi dans WooCommerce → État) affiche beaucoup d’actions En attente avec des dates passées, ou beaucoup d’actions Échouées.
- Un avertissement dans l’administration signale des actions en retard.
- Les webhooks, les e-mails de commande, les renouvellements d’abonnements ou les synchronisations ERP arrivent en retard, ou pas du tout.
- Les tables
actionscheduler_actionsetactionscheduler_logsatteignent des millions de lignes. - Le site ralentit quand la file rattrape soudain son retard.
Comment fonctionne Action Scheduler
Les actions sont stockées en base de données et traitées par lots par un runner. Le runner est déclenché par WP-Cron (chaque minute) et, lors des requêtes d’administration, par une requête asynchrone ; il peut aussi être lancé avec WP-CLI. Chaque lot traite un nombre limité d’actions dans une limite de temps, donc une grosse accumulation demande de nombreuses exécutions pour être résorbée.
Causes les plus fréquentes
- WP-Cron ne s’exécute pas de façon fiable : peu de trafic,
DISABLE_WP_CRONdéfini sans vraie tâche cron pour le remplacer, ou requêtes loopback bloquées par l’hébergeur ou une extension de sécurité. - Les actions échouent : une erreur PHP dans la tâche, une API externe qui refuse ou expire, ou des données que la tâche n’attend pas.
- Un déluge d’actions : une extension qui planifie une action par produit, commande ou client, ou qui replanifie sans cesse la même action.
- Des lots trop lents : chaque action prend des secondes (appels externes), donc un lot n’en traite que quelques-unes avant sa limite de temps.
- Des réservations périmées : un runner est mort en plein lot et ses actions restent réservées jusqu’à leur libération.
Diagnostic
1. Lisez la file
Dans Outils → Actions planifiées, regardez les totaux par statut, puis filtrez sur En attente et triez par date : de quand date l’action en retard la plus ancienne ? Filtrez sur Échouée et ouvrez-en quelques-unes : la colonne de journal affiche l’exception ou le message d’erreur.
2. Trouvez les hooks dominants
Sur une copie de la base de données, une requête en lecture seule montre quelles tâches remplissent la file :
SELECT hook, status, COUNT(*) AS total
FROM wp_actionscheduler_actions
GROUP BY hook, status
ORDER BY total DESC
LIMIT 20;(Remplacez wp_ par le préfixe de vos tables.) Un ou deux hooks représentent généralement la plupart des lignes, et leurs noms désignent l’extension responsable.
3. Vérifiez que le runner s’exécute
DISABLE_WP_CRONest-il défini danswp-config.php? Si oui, une vraie tâche cron appelle-t-elle WP-Cron ou WP-CLI chaque minute ?- Outils → Santé du site signale-t-il des problèmes d’événements planifiés ou de requêtes loopback ?
- Lancer la file à la main traite-t-il les actions ?
$ wp action-scheduler run --batch-size=50Journaux et vérifications techniques
- Écran des Actions planifiées : totaux, plus ancienne action en retard, actions échouées et leurs journaux.
- WooCommerce → État → Journaux (
fatal-errors) et le journal d’erreurs PHP aux heures où les actions échouent. DISABLE_WP_CRONdanswp-config.php; la crontab du serveur.- Santé du site pour les problèmes de loopback et d’événements planifiés.
- Taille des tables
actionscheduler_actionsetactionscheduler_logs.
Solutions
- Lancez WP-Cron depuis le serveur sur les sites à fort ou à faible trafic : définissez
DISABLE_WP_CRONet ajoutez une tâche cron qui s’exécute chaque minute.
# crontab : exécute chaque minute les événements cron WordPress échus
* * * * * cd /path/to/wordpress && wp cron event run --due-now --quiet- Corrigez les tâches en échec : les journaux des actions nomment l’erreur ; corrigez le code ou l’intégration appelée, puis laissez le travail échoué être relancé ou replanifié comme prévu par l’extension.
- Résorbez les accumulations de façon maîtrisée : lancez la file avec WP-CLI aux heures creuses, en surveillant la charge du serveur.
- Arrêtez le déluge à la source : corrigez ou reconfigurez l’extension qui planifie trop d’actions.
- Laissez le nettoyage fonctionner : les actions terminées sont supprimées après la période de rétention dès que le runner fonctionne normalement.
- Ajustez avec prudence : la taille des lots, la limite de temps et les lots simultanés peuvent être augmentés par des filtres, mais seulement une fois le runner fiable et si le serveur en a la capacité.
Ce qu’il ne faut pas faire
- Ne faites pas de
TRUNCATEni de suppressions massives dans les tables d’Action Scheduler. Les lignes en attente incluent des renouvellements d’abonnements, des webhooks, des e-mails et des synchronisations qui n’ont pas encore eu lieu. - Ne marquez pas des actions échouées comme terminées sans comprendre ce qu’elles devaient faire.
- N’augmentez pas la concurrence sur un serveur déjà en difficulté ; cela ajoute de la charge sans corriger la cause.
Quand faire appel à un expert
Faites appel à un ingénieur quand des actions échouées touchent des paiements, des renouvellements ou des synchronisations de commandes, quand les tables sont énormes et que le site ralentit, ou quand vous ne savez pas quelles actions en attente peuvent être supprimées sans risque.
Problèmes liés
- WooCommerce / Intégrations Webhooks WooCommerce en échec : comment les diagnostiquer Journaux de livraison, codes de réponse, signatures, et pourquoi WooCommerce désactive un webhook après plusieurs livraisons échouées d’affilée.
- WooCommerce / Performance Checkout WooCommerce lent : quoi vérifier Séparez le temps PHP, les requêtes en base de données et les appels d’API externes avant de changer de cache ou d’hébergement.
- WooCommerce / Paiements WooCommerce : paiement échoué mais client débité Quand la passerelle encaisse le paiement mais que la commande reste en attente ou échouée, vérifiez le relais des callbacks et des webhooks avant de toucher à la commande.
Questions fréquentes
Que signifie l’avertissement sur les actions en retard ?
Ce sont des actions dont l’heure prévue est passée mais qui ne se sont pas encore exécutées. Quelques-unes pendant peu de temps, c’est normal sur un site à faible trafic ; un nombre croissant signifie que la file n’est pas traitée.
Peut-on supprimer des actions planifiées sans risque ?
Les actions terminées et annulées ne sont que de l’historique et sont nettoyées automatiquement après la période de rétention. Les actions en attente sont du travail pas encore effectué (renouvellements, webhooks, e-mails) et ne doivent pas être supprimées sans savoir ce qu’elles sont.
Pourquoi mes tables actionscheduler sont-elles si volumineuses ?
Généralement parce qu’une extension planifie un très grand nombre d’actions, parce que des actions échouées s’accumulent ou parce que le nettoyage des actions terminées ne s’exécute pas. Identifiez les hooks qui dominent la table avant de décider quoi faire.
Peut-on lancer Action Scheduler en ligne de commande ?
Oui. Avec WP-CLI, wp action-scheduler run traite la file. C’est utile pour résorber une accumulation et pour voir les erreurs directement.