Archivos o usuarios reaparecen a intervalos aunque ningún administrador esté activo. Un evento de WP-Cron, Action Scheduler o cron del servidor puede ejecutar la persistencia.
No borres cada evento desconocido: WooCommerce, copias, correo y actualizaciones dependen de tareas.
Relaciona recurrencia y horario
Crea una cronología de cambios y compárala con intervalos. WP-Cron puede retrasarse; en webs con poco tráfico una tarea vence y se ejecuta con el siguiente visitante.
Lista eventos desde un entorno autorizado:
wp cron event list --fields=hook,next_run_gmt,next_run_relative,recurrence
Guarda la salida antes de modificar y no ejecutes hooks sospechosos.
Atribuye cada hook cuestionable
Busca el nombre y callback en fuentes verificadas. Comprueba que el componente propietario esté activo, mantenido y deba programarlo.
Nombres aleatorios, callbacks en uploads, recuperación de código remoto y tareas sin propietario merecen revisión. Un evento legítimo puede estar secuestrado mediante un callback modificado.
Protege los argumentos porque pueden incluir datos personales o secretos.
Inspecciona Action Scheduler aparte
WooCommerce y muchos plugins lo usan en vez de WP-Cron. Revisa acciones pendientes, fallidas y recurrentes, hooks, grupos y logs.
No purgues una cola grande: puede contener pagos, suscripciones, webhooks, email o stock.
Conserva la acción maliciosa, elimina solo persistencia confirmada y repara el código que la registró.
Comprueba cron del servidor
cPanel, Plesk y VPS pueden ejecutar PHP o URLs fuera de WordPress. Exporta comandos y registra usuario, intervalo y creación.
No ejecutes un comando desconocido ni sigas su URL. Consérvalo como texto y revisa el archivo sin conexión.
Comprueba webs vecinas: un cron puede apuntar a varias raíces.
Revisa también temporizadores del sistema, paneles de automatización y scripts de copia o despliegue si el alojamiento los ofrece. Resuelve las rutas reales antes de concluir que una tarea pertenece a una web: un enlace simbólico o una ruta compartida puede hacer que el comando escriba en otra instalación. Comprueba propietario y permisos sin alterarlos durante la recogida de evidencias.
Elimina el registrador antes del evento
Si el código programa la tarea en cada petición, borrarla primero solo hará que vuelva. Contén, conserva y elimina o reemplaza el registrador desde fuentes fiables.
Después desprograma el hook y argumentos exactos mediante herramientas seguras. Borra opciones o transients relacionados solo tras atribuirlos.
No añadas un script de limpieza nuevo a producción sin revisión y copia de base.
Inspecciona dependencias externas
Un hook de nombre legítimo puede tener un callback modificado que descarga instrucciones o lee un payload de la base. Rastréalo estáticamente y registra dominios, timeouts y destinos.
Bloquear un dominio confirmado contiene temporalmente, pero no limpia: el código puede cambiar de dominio. Elimina el callback comprometido y revisa otros eventos del componente.
Restaura un cron controlado
Confirma que siguen funcionando publicaciones, actualizaciones, copias y tareas de WooCommerce. Si usas cron de sistema con DISABLE_WP_CRON, verifica el runner antes de activar la constante.
Escalona análisis y copias pesados, pero no retrases pedidos sin entenderlos.
Documenta la referencia esperada de horarios.
Demuestra que la tarea no vuelve
Monitoriza eventos, archivos y usuarios durante varios intervalos anteriores. Ejecuta cron de visitante y runner autorizado.
Busca en logs intentos de llamar la ruta eliminada y confirma que no aparece un hook equivalente con otro nombre.
Registra una referencia limpia con hook, propietario, frecuencia y siguiente ejecución. Compárala después de tráfico real, una actualización de plugins y el procesamiento normal de pedidos. Revisa tanto tareas pendientes como completadas o fallidas: una persistencia puede ejecutarse una vez, borrar su propia fila y dejar otro evento como relevo. Si un callback falla, confirma que no dejó parcialmente creado un archivo, usuario o fragmento en la base.
Cuándo pedir limpieza especializada
Solicita ayuda si vuelven hooks, callbacks ofuscados o la cola contiene ecommerce. Envía nombres y horas con argumentos censurados.
Una limpieza completa elimina evento, código registrador y vía de acceso que introdujo ambos.