Descubrí que tengo 29,000 trabajos cron en mi base de datos de WordPress de complementos desactivados y eliminados. He probado varios complementos optimizadores, pero la gran cantidad de trabajos cron significa que no puedo eliminarlos con complementos.
También probé esto en mis functions.php sin éxito:
add_action("init", "clear_crons_left");
function clear_crons_left() {
wp_clear_scheduled_hook("cron_name");
}
¿Hay algún comando SQL que pueda usar en phpmyadmin para buscar por cron hook y eliminarlos?
Respuestas:
Gracias Privateer por la pronta respuesta y asesoramiento.
Encontré una forma de evitarlo antes de ver tu respuesta. Aquí hay un método paso a paso para eliminar miles de trabajos cron antiguos y puede ser útil para otra persona.
Me conecté a phpMyAdmin. Hice clic en mi base de datos y luego en la pestaña 'buscar'. Escribí 'cron', luego seleccioné 'todas las tablas' e hice clic en 'Ir'. Desplacé la lista de resultados de búsqueda a mi tabla wp_options. Hice clic en 'Examinar'. En la parte superior de la lista estaba option_name 'cron'. Hice clic en 'Editar' y luego esperé a que se cargara la página. Hice clic en el cuadro que mostraba la lista de trabajos cron. La lista cron fue tan larga que tardó unos 80 segundos en responder mi cursor. Luego usé Ctrl-A en el teclado para seleccionar todo antes de presionar el botón Eliminar. Pasaron unos 2 minutos antes de que mi navegador completara la eliminación (se agotó el tiempo de espera de Chrome, así que probé Firefox que funcionó).
Después de otro par de minutos, los trabajos cron para mis complementos activos actuales volvieron a llenar la lista. Hubo 9 trabajos cron (¡por debajo de más de 29,000!). Seis años de trabajos cron duplicados de complementos mal codificados, algunos de los cuales acabo de instalar por un día para probar. También cientos de complementos comunes como Wordfence, BackupBuddy, Nextgen Gallery y AutoOptimizer, todos los cuales había desinstalado en el pasado. Mi sitio ahora se carga como si hubiera sido turbocargado. El área de administración es mucho más rápida. Los errores de tiempo de espera de administrador han desaparecido. Había pasado tanto tiempo optimizando mi sitio web tratando de disminuir el tiempo de carga. Incluso mudé hosts y actualicé mis planes de hosting. Nada aumentó la velocidad de mi sitio como eliminar todos los trabajos cron obsoletos. El tiempo de descarga móvil disminuyó de 20 segundos a 6 segundos.
En mi búsqueda de una solución, encontré muy poca información sobre el efecto de los trabajos cron en el rendimiento del sitio web. Muchos dijeron que hizo poca diferencia y para un pequeño número de trabajos cron es cierto. Pero años después de la vida de un sitio de WordPress, me pregunto cuántos están inflados con cientos, si no miles, de trabajos cron antiguos de complementos eliminados. En lugar de pedirles a los usuarios que verifiquen su límite de memoria php, sugeriría que los desarrolladores primero soliciten a los usuarios que verifiquen la cantidad de trabajos cron en wp_options cuando resuelven errores fatales de memoria. ¡Puede sorprenderte / sorprenderte por lo que encuentres! :-)
fuente
Tratar
Si lo encuentra, puede probar:
UPDATE wp_options SET option_value = '' WHERE option_name = 'cron'
update_option('cron', '');
Es posible que deba eliminar la opción cron o establecer el valor en una matriz serializada vacía.
Usar update_option sería más seguro ya que no estoy seguro de si el valor debería ser una matriz vacía serializada o una cadena vacía. Sin embargo, puede registrar wp-includes / options.php ... pero el uso de update_option lo manejará correctamente sin preocuparse por la base de datos.
fuente
Los eventos cron de Wordpress también se pueden borrar desde la línea de comandos, utilizando WP-CLI :
Más detalles en los documentos wp-cli .
fuente
wp option delete cron
wp option delete cron
funciona cuando hay miles de trabajos cron incluidos en las opciones. Estos trabajos malos provienen principalmente de complementos malos, haciendo cron de la manera incorrecta.Una solución aún más simple es llamar
delete_option( 'cron' );
una vez en algún complemento. Todos los trabajos cron agregados automáticamente se agregarán nuevamente en la próxima visita / solicitud de su sitio.Como complemento de un caso (mu) que solo se ejecuta cada vez que lo activa:
fuente
En caso de que alguien quisiera borrar un nombre cron específico (por ejemplo, 'CRON_NAME'), esta solución funcionó para mí:
fuente
Tuve un año lleno de trabajos cron pendientes, unos 5 Mb de datos para esta entrada de base de datos única. Se eliminaron los trabajos cron de la base de datos. Trabajos cron deshabilitados en wp-config.php
Configure un trabajo cron manual en cpanel. Ahora mi sitio está literalmente volando. Había estado actualizando servidores, comprando más CPU / RAM, pero todo fue una pérdida de tiempo y dinero.
Para eliminar todos los trabajos cron pendientes, ejecute esta consulta en phpmyadmin> Ejecutar consulta:
Muchas gracias Pádraig Ó Beirn.
fuente
Si borra sus tareas cron de esta manera y usa UpdraftPlus, deberá volver a guardar su configuración para regenerar las tareas cron. Hasta que haga esto, sus copias de seguridad automáticas no se ejecutarán (pero las copias de seguridad manuales sí lo harán).
La configuración seguirá estando allí, y no necesita editar nada. Simplemente vaya al [menú superior de UpdraftPlus] -> Configuración, y desplácese hacia abajo hasta la parte inferior y haga clic en "Guardar cambios".
fuente
Llegué aquí por la gran cantidad de
sm_ping
cronjobs enwp_options
. Si ese es su problema, puede intentar lo siguiente:Ponga esto en functions.php (tema secundario) si no tiene acceso a phpmyadmin, especialmente si su sitio está lleno de ping cronjobs (sm_ping):
fuente
Me encontré con un problema similar, donde debido a uno de mis propios errores de codificación, miles de copias de un trabajo cron en particular se habían agregado a un sitio. La función wp_clear_scheduled_hook pareció agotar el tiempo de espera y fallar. Lo solucioné con un script que desarmó todas las instancias de la función cron dentro de la matriz y luego agregó la matriz filtrada como la nueva opción cron en la tabla de opciones. Vea abajo.
De esta manera, evité eliminar los trabajos cron deseables que se agregaron previamente al sitio.
Esto podría modificarse como una función que necesita eliminar una matriz de controladores o conservar una matriz de controladores.
fuente
Tengo una manera muy simple de eliminar todos los eventos cron. Antes, debe DESACTIVAR WP Cron en wp-config. Luego, instala Plugin WP Control. Luego, vaya al menú Herramientas> Eventos de Cron> Haga clic en elegir todo> Eliminar todos. ¿Podrías intentarlo? Gracias.
fuente