Programación de cron en toda la red en WordPress multisitio

3 minutos de lectura

Estoy usando WP Cron para programar un cron de toda la red desde un complemento.

Quiero ejecutar el cron cada hora sin importar desde qué blog se active. Lo más importante es que necesito evitar que el cron se ejecute varias veces desde diferentes sitios en la red.

¿Hay alguna manera de configurar esto usando el sistema de programación de WordPress?

wp-cron en multisitio depende del (sub)dominio, por lo que cada instancia es independiente. Entonces, una llamada de a.site.com es una instancia completamente separada de una llamada de b.site.com

Eso significa que, de manera predeterminada, no hay forma de detener su ejecución más de una vez por red cuando tiene el complemento ejecutándose en más de una instancia. si el código que activa el cron se puede ejecutar desde cualquier sitio en esa red.

Hay algunas maneras en las que puedo pensar para evitar esto:

1) (Esto no se ha probado, pero creo que podría funcionar) Hay una constante que puede definir en wp-config llamada WP_CRON_LOCK_TIMEOUT que podría definir como 3600. Eso significaría que todos Los procesos cron solo podían ejecutarse una vez cada hora. No estoy seguro si esa es una opción para lo que buscas.

2) Detenga la ejecución de wp-cron por sí mismo y luego configure un trabajo cron del servidor para activar el wp-cron cada hora en un crontab. Deberías definir (‘DISABLE_WP_CRON’, true); en wp-config y luego en el crontab solo haz un curl http://sitio.com/wp-cron.php
para ejecutarse cada 3600 segundos (o wget en lugar de curl)

3) Puede configurar una opción de sitio en toda la red que se actualice con wp-cron cuando se ejecute por primera vez a la hora. Debería crear una verificación en el script que ejecuta el trabajo cron para obtener esta opción y ver si el tiempo almacenado es inferior a 3600 segundos. Si es así, no permita que se ejecute el cron. Si no es así, ejecute el cron y actualice la opción de todo el sitio con la hora actual. (ver add_site_option() update_site_option() y get_site_option() son esencialmente lo mismo que sus contrapartes de un solo sitio, pero son para toda la red)

4) Hay un complemento ‘premium’ que básicamente genera un proceso PHP en segundo plano que se ejecuta independientemente de cualquier persona que visite su sitio. De forma predeterminada, se ejecuta cada 60 segundos, pero sería fácil cambiar eso. http://codecanyon.net/item/improved-cron/176543

wp-cron.php realmente no le brinda ninguna acción o filtro, establece transitorios que posiblemente podría considerar para intentar probar, pero no creo que ese sea el camino a seguir.

Hay algunos complementos realmente útiles (gratuitos) para cron:

http://wordpress.org/extend/plugins/wp-crontrol/

http://wordpress.org/extend/plugins/wp-cron-control/

http://wordpress.org/extend/plugins/cron-view/

  • Por el momento, usaré la opción 3 configurando un sitio transitorio en lugar de una opción de sitio. Sin embargo, también exploraré la primera opción. ¡Muchas gracias!

    – Alejandro Biavati

    8 de marzo de 2013 a las 18:19

Prueba esto:

http://www.lucasrolff.com/wordpress/por-que-wp-cron-sucks/

Esta solución simple funcionó para mí.

Solo sigue la parte 2.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad