WooCommerce / Rendimiento
Problemas con Action Scheduler en WooCommerce
Respuesta corta
Action Scheduler es la cola de tareas en segundo plano que usan WooCommerce y muchas extensiones para webhooks, emails, renovaciones y sincronizaciones. Los problemas aparecen como acciones vencidas o fallidas en Herramientas → Acciones programadas. Las acciones vencidas significan que la cola no se procesa, normalmente porque WP-Cron no se ejecuta de forma fiable. Las acciones fallidas significan que la propia tarea da error, y el registro de la acción explica por qué. Arregla el runner o el código que falla; nunca vacíes las tablas.
Síntomas
- Herramientas → Acciones programadas (también en WooCommerce → Estado) muestra muchas acciones Pendientes con fechas pasadas, o muchas acciones Fallidas.
- Un aviso en la administración informa de que se han encontrado acciones vencidas.
- Los webhooks, los emails de pedidos, las renovaciones de suscripciones o las sincronizaciones con el ERP llegan tarde o no llegan.
- Las tablas
actionscheduler_actionsyactionscheduler_logscrecen hasta millones de filas. - El sitio se ralentiza cuando la cola se pone al día de golpe.
Cómo funciona Action Scheduler
Las acciones se guardan en la base de datos y un runner de la cola las procesa por lotes. El runner lo dispara WP-Cron (cada minuto) y, en las peticiones de la administración, una petición asíncrona; también se puede ejecutar con WP-CLI. Cada lote procesa un número limitado de acciones dentro de un límite de tiempo, así que una acumulación grande necesita muchas ejecuciones para vaciarse.
Causas más comunes
- WP-Cron no se ejecuta de forma fiable: poco tráfico,
DISABLE_WP_CRONdefinido sin un cron real que lo sustituya, o peticiones loopback bloqueadas por el hosting o por un plugin de seguridad. - Las acciones fallan: un error PHP en la tarea, una API externa que la rechaza o supera el tiempo, o datos que la tarea no espera.
- Una avalancha de acciones: un plugin que programa una acción por producto, pedido o cliente, o que reprograma la misma acción una y otra vez.
- Lotes demasiado lentos: cada acción tarda segundos (llamadas externas), así que un lote solo procesa unas pocas antes de su límite de tiempo.
- Reservas caducadas: un runner murió a mitad de lote y sus acciones siguen reservadas hasta que se liberan.
Diagnóstico
1. Lee la cola
En Herramientas → Acciones programadas, revisa los totales por estado; después filtra por Pendiente y ordena por fecha: ¿qué antigüedad tiene la acción vencida más vieja? Filtra por Fallida y abre algunas: la columna de registro muestra la excepción o el mensaje de error.
2. Averigua qué hooks dominan
Sobre una copia de la base de datos, una consulta de solo lectura muestra qué tareas llenan la cola:
SELECT hook, status, COUNT(*) AS total
FROM wp_actionscheduler_actions
GROUP BY hook, status
ORDER BY total DESC
LIMIT 20;(Sustituye wp_ por el prefijo de tus tablas.) Uno o dos hooks suelen acumular la mayoría de las filas, y sus nombres apuntan al plugin responsable.
3. Comprueba que el runner se ejecuta
- ¿Está definido
DISABLE_WP_CRONenwp-config.php? Si es así, ¿hay un cron real que llame a WP-Cron o a WP-CLI cada minuto? - ¿Herramientas → Salud del sitio informa de problemas con los eventos programados o con las peticiones loopback?
- ¿Ejecutar la cola a mano procesa las acciones?
$ wp action-scheduler run --batch-size=50Registros y comprobaciones técnicas
- Pantalla de Acciones programadas: totales, la vencida más antigua, las acciones fallidas y sus registros.
- WooCommerce → Estado → Registros (
fatal-errors) y el log de errores PHP a las horas en que fallan las acciones. DISABLE_WP_CRONenwp-config.php; el crontab del servidor.- Salud del sitio para problemas con loopback y eventos programados.
- Tamaño de las tablas
actionscheduler_actionsyactionscheduler_logs.
Soluciones
- Ejecuta WP-Cron desde el servidor en sitios con mucho o con poco tráfico: define
DISABLE_WP_CRONy añade un cron que se ejecute cada minuto.
# crontab: ejecuta cada minuto los eventos cron de WordPress pendientes
* * * * * cd /path/to/wordpress && wp cron event run --due-now --quiet- Arregla las tareas que fallan: los registros de las acciones nombran el error; arregla el código o la integración a la que llama y deja que el trabajo fallido se reintente o se reprograme como prevé el plugin.
- Vacía las acumulaciones de forma controlada: ejecuta la cola con WP-CLI en horas tranquilas, vigilando la carga del servidor.
- Corta la avalancha en su origen: arregla o reconfigura el plugin que programa acciones en exceso.
- Deja que la limpieza funcione: las acciones completadas se eliminan tras el periodo de retención en cuanto el runner funciona con normalidad.
- Ajusta con cuidado: el tamaño de lote, el límite de tiempo y los lotes simultáneos se pueden subir con filtros, pero solo cuando el runner es fiable y el servidor tiene capacidad.
Qué no hacer
- No hagas
TRUNCATEni borrados masivos en las tablas de Action Scheduler. Las filas pendientes incluyen renovaciones de suscripciones, webhooks, emails y sincronizaciones que todavía no han ocurrido. - No marques acciones fallidas como completadas sin entender qué debían hacer.
- No subas la concurrencia en un servidor que ya va justo; añade carga sin arreglar la causa.
Cuándo recurrir a un experto
Recurre a un ingeniero cuando las acciones fallidas afectan a pagos, renovaciones o sincronizaciones de pedidos, cuando las tablas son enormes y el sitio se ralentiza, o cuando no tienes claro qué acciones pendientes se pueden eliminar con seguridad.
Problemas relacionados
- WooCommerce / Integraciones Webhooks de WooCommerce que fallan: cómo diagnosticarlos Registros de entrega, códigos de respuesta, firmas y por qué WooCommerce desactiva un webhook tras varias entregas fallidas seguidas.
- WooCommerce / Rendimiento Checkout lento en WooCommerce: qué revisar Separa el tiempo de PHP, las consultas a la base de datos y las llamadas a APIs externas antes de cambiar la caché o el hosting.
- WooCommerce / Pagos WooCommerce: el pago falla pero al cliente se le ha cobrado Cuando la pasarela cobra el pago pero el pedido se queda pendiente o fallido, revisa el traspaso de callbacks y webhooks antes de tocar el pedido.
Preguntas frecuentes
¿Qué significa el aviso de acciones vencidas?
Son acciones cuya hora programada ya pasó pero que aún no se han ejecutado. Unas pocas durante poco tiempo es normal en sitios con poco tráfico; un número creciente significa que la cola no se procesa.
¿Es seguro borrar acciones programadas?
Las acciones completadas y canceladas son solo historial y se limpian automáticamente tras el periodo de retención. Las acciones pendientes son trabajo que todavía no se ha hecho (renovaciones, webhooks, emails) y no deben borrarse sin saber qué son.
¿Por qué mis tablas actionscheduler son tan grandes?
Normalmente porque un plugin programa enormes cantidades de acciones, porque se acumulan acciones fallidas o porque la limpieza de las completadas no se ejecuta. Averigua qué hooks dominan la tabla antes de decidir qué hacer.
¿Puedo ejecutar Action Scheduler desde la línea de comandos?
Sí. Con WP-CLI, wp action-scheduler run procesa la cola. Es útil para vaciar una acumulación y para ver los errores directamente.