¿Debería deshabilitar WP_CRON y activar wp-cron.php desde el servidor?

20 ene 2017, 16:36:57
Vistas: 27.2K
Votos: 17

Parece que WordPress activa innecesariamente WP CRON en cada carga de página. Estoy pensando que, en lugar de que se ejecute en cada visita, ¿por qué no programarlo para que se ejecute cada 5 minutos a través del servidor? ¿Podría simplemente activar wp-cron.php cada cinco minutos y lograr el resultado deseado?

¿Hay alguna desventaja en hacer esto?

1
Todas las respuestas a la pregunta 4
6
19

No hay desventajas al ejecutar WP CRON utilizando los trabajos cron del servidor. De hecho, esta es la práctica recomendada.

Según el Documento Oficial de Desarrollo de Plugins de WordPress:

WP-Cron no se ejecuta continuamente, lo que puede ser un problema si hay tareas críticas que deben ejecutarse a tiempo. Hay una solución fácil para esto. Simplemente configura el programador de tareas de tu sistema para que se ejecute en los intervalos que desees (o en el momento específico necesario).

Para hacer esto, primero necesitas deshabilitar el comportamiento predeterminado de cron en wp-config.php:

define('DISABLE_WP_CRON', true);

Luego, programa wp-cron.php desde tu servidor. Para Linux, eso significa:

crontab -e

Sin embargo, en lugar de ejecutarlo en la Línea de Comandos (CLI), ejecútalo como una solicitud HTTP. Para eso puedes usar wget:

*/5 * * * * wget -q -O - https://tu-dominio.com/wp-cron.php?doing_wp_cron

WordPress carga todos los archivos principales necesarios, Plugins, etc. en wp-cron.php con el siguiente CÓDIGO:

if ( !defined('ABSPATH') ) {
    /** Configurar el entorno de WordPress */
    require_once( dirname( __FILE__ ) . '/wp-load.php' );
}

Así que no te preocupes por WordPress no cargar características importantes.

20 ene 2017 18:36:34
Comentarios

La documentación de WordPress.org que enlazaste menciona wget http://TU_URL_DEL_SITIO/wp-cron.php sin la adición de ?doing_wp_cron. ¿Entonces uno es mejor que el otro? ¿Qué hace la adición de ?doing_wp_cron que la versión sin ella no hace?

Garconis Garconis
26 abr 2018 23:25:51

Probablemente solo para que tus registros muestren la cadena de consulta y así sepas con certeza cómo fue llamado.

Slbox Slbox
13 abr 2019 00:45:06

No estoy de acuerdo con esto para nada. En primer lugar, no es cierto que sea "recomendado". En segundo lugar, este método perjudicará cualquier plugin que use el método realmente recomendado para programar eventos. Creo que este es un consejo realmente malo. Casi nadie debería desactivar el cron a menos que tengas una razón MUY específica para hacerlo. La única razón que se me ocurre es si estás desglosando WordPress para una CDN o algo similar. Esto NO es una práctica normal.

John Dee John Dee
27 sept 2019 23:03:17

@JohnDee: este método no desactiva realmente el cron, desactiva el método WP Cron que verifica e intenta ejecutar trabajos cron en cada carga de página. define('DISABLE_WP_CRON', true); desactiva solo esa parte del proceso cron y luego llamar al script cron con código como: */5 * * * * wget -q -O - https://tu-dominio.com/wp-cron.php?doing_wp_cron en el servidor asegura que los trabajos cron se ejecuten. Cualquier plugin de programación ni siquiera notará la diferencia.

Fayaz Fayaz
28 sept 2019 06:01:49

El enlace de documentación de WordPress.org sobre este tema cambió a https://developer.wordpress.org/plugins/cron/hooking-wp-cron-into-the-system-task-scheduler/

aldemarcalazans aldemarcalazans
11 dic 2019 22:12:59

@aldemarcalazans: ¡gracias! Enlace actualizado. WP realmente debería haber puesto un redireccionamiento. Supongo que no les importa el SEO :)

Fayaz Fayaz
12 dic 2019 04:42:43
Mostrar los 1 comentarios restantes
2

Existen un par de desventajas: En primer lugar, cuando se utiliza wp-cron.php como CLI, variables como $_SERVER no están configuradas. Los usuarios superan esta limitación haciendo una petición cURL a wp-cron.php en su lugar.

En segundo lugar, dado que WordPress en sí no se carga con wp-cron.php; si utilizas un plugin de correo SMTP, este no se cargará al llamar a wp-cron. Nuevamente, usar una llamada cURL soluciona este problema. cURL parece ser el método más frecuentemente utilizado.

Sin embargo; yo prefiero usar wp-cli después de configurar correctamente los ajustes de correo en postfix y (para nginx) la configuración de php-fpm, además de establecer un crontab como:

*/5    *   *   *   *  wp cron event list --skip-plugins --skip-themes --path="/var/www/vhosts/example.com/httpdocs/wp" --fields=hook,next_run_relative --format=csv | awk -F, '$2=="now" {print $1}' | xargs -r wp --path="/var/www/vhosts/example.com/httpdocs/wp" cron event run $1

(Listar todos los cron con campos específicos en formato CSV - hook siendo el nombre del cron, next_run_relative es el tiempo. Filtrar aquellos que muestren 'now' como próxima ejecución (los que están pendientes ahora) usando AWK, pasar esa lista a xargs para ejecutar wp cron event run $HOOK en cada cron.) Usar wp-cli carga WordPress correctamente (elijo omitir plugins al listar los cron, ya que errores de código y advertencias PHP podrían afectar la salida del script; pero no omitirlos al ejecutar el cron con xargs, ya que el cron podría necesitar los plugins cargados)

Espero que esto te dé algunas pautas sobre qué tener en cuenta.

20 ene 2017 18:16:45
Comentarios

¿Qué tal configurar: /15 * * * wget -q -O - http://tudominio.com/wp-cron.php?doing_wp_cron como sugiere TomMcFarlin - https://tommcfarlin.com/wordpress-cron-jobs/? Parece funcionar bien. Agradecería tu comentario.

TheBigK TheBigK
20 ene 2017 19:19:38

Sí, como mencioné, algunas personas eligen usar curl (wget o cualquier otra llamada http) para activar los crons, y no hay nada malo con ese método. Solo estaba advirtiendo sobre los problemas de llamar directamente al archivo wp-cron.php, que no incluiría los archivos requeridos, y sugiriendo otro método alternativo si quisieras darle un poco más de vida.

TechnicalChaos TechnicalChaos
20 ene 2017 20:09:16
0

Todavía no he encontrado una desventaja real al externalizar wp-cron a un servicio externo. Llevo haciendo esto durante muchos años ya.

Especialmente en el mundo actual donde puedes ejecutar aplicaciones como microservicios.

Yo utilizo contenedores Docker separados para cada componente de WordPress - php, web, db, crontab, redis, etc. Teniendo crontab como un contenedor separado, llamando a wp-cron via HTTP usando la red local, ejecutándose solo cuando lo necesito.

Esto reduce el estrés en los nodos backend y mejora la seguridad al tener una superficie de ataque más pequeña.

Si el desarrollador no puede averiguar cómo hacer las cosas sin tener que llamar a wp-cron en cada carga de página, vaya, esto solo habla de su inexperiencia. "Dejarlo como está" porque no entiendes cómo funcionan las cosas no es una buena razón para mantenerlo.

6 feb 2020 15:23:58
5
-3

Hay muchas razones para no desactivar el wp-cron. De hecho, es casi imposible encontrar un caso de uso para hacerlo. No ralentiza tu sitio y se utiliza para cosas de las que quizás no estés al tanto.

Muchos plugins usan el WP-Cron para programar tareas. Pueden comportarse de forma inesperada si desactivas el programador.

Existe una proliferación de tutoriales sobre este tema porque es confuso, y porque no afecta mucho a tu sitio cuando lo desactivas. Lo que sí hará es causar un dolor de cabeza al desarrollador que tenga que solucionar el misterioso problema que creará en seis meses.

Además, el WP Heartbeat se ejecuta cada 15 segundos en el área de administración, resolviendo este problema para el 99% de las personas que creen tenerlo.

29 sept 2019 15:33:08
Comentarios

Esta es una respuesta terrible - NO están desactivando WP Cron. Simplemente están deshabilitando la invocación de WP Cron al cargar la página y trasladándola al demonio cron del sistema en su lugar. Vaya.

Barry Chapman Barry Chapman
26 ene 2020 08:03:48

De todos modos, la principal razón para dejarlo como está es que muchos plugins ahora usan el cron para ejecutar tareas en segundo plano prolongadas. Puedes estropear algo que la SIGUIENTE persona está haciendo, porque esperan que el sistema funcione de manera estándar. ¡Buena suerte!

John Dee John Dee
26 ene 2020 12:32:24

si un plugin está codificado de una manera que se rompe por completo si wp cron está desactivado, entonces significa que ha sido programado por un incompetente, y es mejor desinstalarlo inmediatamente.

Magnetic_dud Magnetic_dud
3 abr 2020 23:46:37

Bueno, estos dos comentarios prueban mi punto. Tienes a un desarrollador diciendo "esto no desactiva cron, simplemente lo mueve al cron del SO" - lo cual es una ruptura en WordPress, que es neutral en cuanto al SO. Luego otro desarrollador dice "oye, es responsabilidad del desarrollador del plugin planear para la aniquilación de wp cron". Uh, ok. ¿Así que si quieres funcionalidad cron, deberías PLANEAR para la eliminación del sistema cron? ¿Para qué? ¿El sistema cron de respaldo? Ese comentario no tiene sentido [obviamente].

John Dee John Dee
4 abr 2020 02:40:15

De cualquier manera, el estado actual es "CONFUSIÓN TOTAL". Ese es el estado actual. La única solución, desde un punto de vista de framework, es decirle a la gente: HAY UNA RAZÓN POR LA QUE EXISTE EL SISTEMA WP-CRON. NO LO DESACTIVEN. La otra opción son 10,000 opiniones diferentes y variadas. Que es lo que tenemos ahora.

John Dee John Dee
4 abr 2020 02:41:39