¿Cómo se implementa WP Cron Locking?

2

WordPress toma medidas para garantizar que una tarea cron no se ejecute dos veces cuando debería ejecutarse una vez, por ejemplo. una vez cada hora cuando se da un horario por hora, en vez de dos veces a la hora programada.

Si bien no es infalible, ¿qué pasos toma WordPress para asegurarse de que suceda en los horarios programados, y solo una vez según lo especificado?

    
pregunta Tom J Nowell 03.12.2012 - 17:55

2 respuestas

3

Se configura un transitorio para reflejar el estado del cron, que se elimina cuando se completan todas las tareas. Cualquier solicitud posterior se ignora si se encuentra ese transitorio ...

    
respondido por el onetrickpony 03.12.2012 - 18:06
2

La respuesta de onetrickpony es correcta en su mayoría. Si dejas que WordPress haga su trabajo predeterminado, o activas manualmente wp-cron obteniendo su URL con 'doing_wp_cron' establecido en un valor único en la cadena GET, entonces puedes esperar que los trabajos no se ejecuten dos veces.

Pero si ejecuta wp-cron.php desde la CLI de PHP en su crontab, la historia es diferente. Ahora verificará una constante llamada WP_CRON_LOCK_TIMEOUT para averiguar si debe ignorar el bloqueo almacenado en el transitorio. Y hay una condición de carrera que permite que el mismo trabajo se ejecute dos veces.

Si desea estar realmente seguro de que el mismo trabajo nunca se ejecute dos veces, no configure DISABLE_WP_CRON o use curl o wget en su crontab para buscar wp-cron.php de esa manera:

*/10 * * * * wget -q -O "http://www.example.com/wp-cron.php?doing_wp_cron='date +\%s.\%N'" > /dev/null 2>&1

También tenga en cuenta que hubo un error en 3.3 que hizo que los trabajos se ejecutaran dos veces si se ejecutaban dos instancias de wp -cron.php fueron lanzados en el mismo segundo. Ahora tendrían que ser lanzados en el mismo microsegundo, lo que sigue siendo posible, pero muy poco probable.

    
respondido por el Alexander Garden 10.11.2013 - 11:59

Lea otras preguntas en las etiquetas