WordPress Cron
Resumen de los puntos clave
- WordPress Cron vs System Cron: WordPress ofrece dos métodos para ejecutar tareas programadas: System Cron, que funciona en el servidor de alojamiento, y WordPress Cron, que se basa en las visitas de los usuarios al sitio.
- Confiabilidad de WordPress Cron: Fuera de la caja, WordPress Cron no es totalmente fiable, ya que depende de las peticiones del usuario. Sin embargo, al integrarlo con System Cron, su fiabilidad puede mejorar considerablemente.
- Integración de WordPress y System Cron: La combinación de WordPress Cron con System Cron garantiza que las tareas programadas se ejecuten de forma fiable y coherente, ofreciendo lo mejor de ambos enfoques.
- Configuración de Cron Jobs: WordPress permite a los desarrolladores añadir y gestionar Cron jobs, especificando intervalos y tareas a ejecutar, ya sea como eventos recurrentes o únicos.
- Monitorización de Cron Jobs: Los desarrolladores pueden monitorizar y gestionar los Cron jobs utilizando herramientas como el plugin WP Crontrol, que proporciona una interfaz fácil de usar para depurar y gestionar las tareas programadas.
- Cron y plugins de caché: La colaboración entre WordPress Cron y los plugins de caché es crucial, ya que los plugins de caché pueden interferir en la ejecución de las tareas programadas, lo que requiere una configuración cuidadosa para un rendimiento óptimo.
- Ventajas de fusionar System Cron y WordPress Cron: Al fusionar System Cron y WordPress Cron, los propietarios de sitios web pueden garantizar una ejecución fiable de las tareas programadas sin depender únicamente de las visitas de los usuarios, lo que evita retrasos en procesos críticos.
Índice
¿Qué es Cron?
El Cron en pocas palabras, es una manera de ejecutar algunas tareas (o trabajos si se quiere) en un horario. Por ejemplo, para mantener los tipos de cambio actualizados en su sitio web necesita actualizarlos una vez al día. En lugar de hacerlo manualmente, creas una tarea cron y la configuras con la frecuencia de una vez al día. Cron es ampliamente utilizado en muchos plugins y temas de WordPress para mantener la información actualizada.
Cron del sistema VS Cron de WordPress
Con WordPress tienes 2 formas diferentes de hacerlo.
Cron del sistema
La primera forma es añadirlo en el cron del sistema Linux (esto es en tu servidor de hosting). Estas tareas se encuentran en el /etc/crontab archivo y con este enfoque es la forma más universal y más fiable para ejecutar tareas Cron. El sistema operativo de su servidor (por ejemplo, Linux, Ubuntu o RedHat) garantiza que las tareas en nuestros archivos PHP serán llamadas tal y como fueron programadas, independientemente de cualquier evento externo.
Aunque es más universal y fiable, no tiene integración con WordPress. Esto significa que si llama a archivos PHP dentro de su tema directamente, entonces no tendrán acceso a ninguna función de WordPress ni a la Base de Datos. Debido al hecho de que WordPress no puede cargar correctamente de esta manera. Además, no es adecuado para plugins, porque si usted está usando el plugin, no se puede simplemente configurar el sistema Cron para todos sus clientes.
WordPress Cron
Entonces aquí entra WordPress Cron y es la segunda forma de ejecutar tareas cron. Puede registrar fácilmente su tarea cron dentro de WordPress, y WordPress se encargará de cargar y ejecutar sus tareas dentro del horario especificado. Suena bien, y es adecuado para plugins.
¿Qué puede haber mejor, verdad? Pero nada es perfecto y este enfoque también tiene inconvenientes.
WordPress es una aplicación basada en PHP y no tiene acceso a su sistema Cron (sistema operativo que se ejecuta en su host). De hecho, esto significa que WP necesita algún evento externo para comprobar la lista de programación y ejecutar las tareas relevantes. Otra cosa es que WordPress SÓLO puede ejecutar tareas Cron cuando alguien visita o abre una página en el sitio web. Si nadie visita su sitio web, las tareas Cron NO se ejecutarán.
Esto puede sonar aterrador, pero la buena noticia es que WordPress garantiza que las tareas serán llamadas, sólo que no hay garantía de cuándo exactamente serán llamadas. Por ejemplo, ha configurado una tarea Cron de tipos de cambio para que se ejecute una vez al día. Ahora bien, en la vida real esto significa que la tarea se ejecutará con el primer visitante, al cabo de un día a la hora establecida. No antes, pero tal vez más tarde, tal vez incluso mucho más tarde si no ha tenido visitantes durante varios días.
Hay algunas tareas que están bien para ejecutar con este enfoque, sin embargo, mientras nadie visita su sitio, Cron no se ejecuta y por lo tanto en realidad no "funciona". Pero hay otras tareas que requieren fiabilidad. Por lo tanto, si sus tareas Cron consisten en obtener información de fuentes externas, o simplemente tareas muy importantes que deben ejecutarse, como cualquier cosa de la API, no puede confiar en este enfoque.
Veredicto
Ambas formas tienen sus ventajas y sus inconvenientes.
Por ello, la mejor solución que utilizan los profesionales, y que recomienda WordPress, es una combinación de los dos enfoques, que le ofrece lo mejor de ambos y contrarresta los inconvenientes de cada uno.
Como propietario de un sitio web (o desarrollador) necesita configurar el sistema Cron job que llamará a WordPress Cron. En general, es relativamente sencillo de hacer, y de esta forma WordPress Cron será más fiable manteniendo el enfoque nativo de WordPress.
Véase el punto nº 2 para saber cómo hacerlo.
Acerca de WordPress Cron
Anteriormente, hemos aprendido que WordPress es una aplicación basada en PHP, y que su Cron interno depende de eventos externos, es decir, de las peticiones de los usuarios. Además de este hecho, hay una lista de aspectos importantes, que repasaremos con más detalle.
1. WordPress Cron es asíncrono
En primer lugar, debe saber que WordPress Cron es asíncrono. Asíncrono significa que ejecuta Cron jobs en una petición separada del propio evento.
Así, una petición de usuario no tendrá retrasos debidos a WordPress Cron, un usuario que disparó algún trabajo Cron no esperará hasta que el trabajo termine para ver el resultado de su petición. Así que puede respirar tranquilo sabiendo que no hay retrasos para sus visitantes. WordPress lo gestiona todo silenciosamente en segundo plano.
Si está interesado en los detalles, técnicamente sucede de la siguiente manera;
WordPress comprueba la programación Cron en cada petición de usuario a un sitio web, y si hay necesidad de ejecutar trabajos Cron, crea una nueva petición al archivo cron del sitio web (/cron.php), usando la librería cURL. El usuario recibe la respuesta a su solicitud inmediatamente, mientras que Cron ejecuta las demás tareas cron en una solicitud separada, que es independiente.
2. WP Cron no es fiable (out-of-the-box). Manera de arreglar
Como ya sabemos, WordPress Cron depende de eventos externos. Comparado con el sistema Cron, tiene un gran inconveniente. Pero podemos arreglarlo fácilmente fusionando el Cron del sistema y el Cron de WordPress.
Así que la solución es crear un trabajo Cron dentro del Cron del sistema y llamar al Cron de WordPress desde allí. De esta manera, recibimos un Cron fiable con todas las características de WordPress y soporte para plugin cron jobs. Puede sonar un poco complicado, pero en realidad no lo es.
Para el manual oficial ver aquí.
La tarea puede dividirse en 2 pasos. El primer paso consiste en crear una nueva tarea Cron del sistema. Básicamente, hay dos tipos diferentes de alojamiento (compartido y dedicado), y la forma de crear cron jobs depende de su tipo de alojamiento.
Cómo añadir una tarea Cron al sistema para alojamiento compartido
Cuando se utiliza alojamiento compartido, hay muchos proveedores diferentes, y es necesario comprobar las características ofrecidas por su proveedor acerca de las tareas Cron. Usualmente, un panel de administración de hosting tiene una pestaña o ítem especial sobre Cron, donde puede administrar las tareas Cron. El panel de administración más común es cPanel, puedes leer más sobre cómo añadir una tarea Cron para cPanel en el artículo oficial . Abajo está el video oficial.
Cómo agregar un trabajo Cron del sistema para el alojamiento VPS
En caso de que usted es un propietario de VPS (Servidor Privado Virtual es decir, Dedicado), es necesario iniciar sesión en su servidor con SSH y ejecute el siguiente comando para abrir un archivo en modo de edición.
crontab -e
Paso 1. Configurar una tarea Cron del sistema para WordPress Cron
Ahora es el momento de crear un trabajo Cron del sistema que llamará a WordPress Cron.
a) Enfoque clásico (con wget)
Añada una nueva línea en su archivo cron y copie el contenido de abajo.
*/10 * * * * wget -q -O - https://YOUR_DOMAIN_HERE/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Nota: La línea anterior no es adecuada para el modo WordPress Multisite. Si utiliza el modo WP Multisite y necesita un Cron fiable, lea más sobre las soluciones aquí.
No olvide sustituir YOUR_DOMAIN_HERE por su dominio.
La primera parte del comando indica que queremos que nuestro comando se ejecute una vez cada diez minutos, independientemente del número de hora, día de la semana y otras opciones. La parte central usa la herramienta wget para solicitar el archivo Cron de WordPress, y la última parte indica que no queremos guardar la salida del archivo Cron.
Puedes leer más sobre los argumentos aquí.
b) Enfoque Pro (con WP-CLI)
Si tienes un sitio web protegido por contraseña (por ejemplo, Dev), el método anterior no funcionará, ya que wget no podrá llamar al archivo wp-cron.php. La solución en este caso es usar la herramienta WP-CLI en tu servidor. Sólo tiene que instalarlo como se describe en el manual oficial, y añadir la siguiente línea a su horario cron, que llamará a Cron a través de la herramienta CLI para el sitio web específico :
// don't forget to replace the path below to yours
wp cron event run --due-now --path=/home/admin/domains/YOUR_DOMAIN_HERE/public_html >/dev/null 2>&1
Este método llamará al Cron directamente a través del sistema de ficheros, sin ninguna petición HTTP. Esto significa que no tendremos problemas con ningún sitio web, incluidos los protegidos con contraseña.
Paso 2. Desactivar las comprobaciones por defecto de WordPress
Como ya hemos integrado WordPress Cron con el Cron del sistema, WordPress ya no necesita comprobar la lista de programación en cada petición de usuario. Se lo decimos a WordPress configurando una constante especial en el archivo wp-config.php.
/* Add any custom values between this line and the "stop editing" line. */
define( 'DISABLE_WP_CRON', true );
/* That's all, stop editing! Happy publishing. */
Como puede ver el archivo tiene una sección especial para valores personalizados, por lo que necesita añadir esta constante después del primer comentario, y antes del segundo.
No se preocupe por la etiqueta de la constante, "DISABLE_WP_CRON" en realidad no significa desactivar completamente WordPress Cron. Desactiva la comprobación de la lista de programación con cada petición del usuario. WP Cron debería seguir funcionando correctamente, ya que llamamos al archivo wp-cron.php directamente a través del Cron del sistema.
¡Ya está! ¡Enhorabuena! Ahora su instalación de WordPress tiene un Cron fiable con todas las características de WordPress. Cron ejecutará los trabajos de acuerdo a la programación, independientemente de la cantidad de visitantes' al sitio web.
3. Cómo añadir y eliminar Cron jobs
WordPress Cron job es sólo un poco de código PHP que se ejecuta por algún horario. Además, puede utilizar todas las características de WordPress y tiene acceso a la Base de Datos. Aquí puedes encontrar un artículo para desarrolladores de WordPress sobre este tema.
Elegir un intervalo
En primer lugar, necesitamos elegir un intervalo por el cual Cron repetirá nuestro trabajo. Los intervalos por defecto de WordPress son cada hora, dos veces al día, diariamente, semanalmente. Aunque es suficiente para la mayoría de los casos, es posible que necesite un intervalo personalizado. Podemos definirlo añadiendo el siguiente código.
add_filter('cron_schedules', function ($schedules) {
return array_merge($schedules, [
// here is the name of our custom interval. used when adding a new job
'five_hours' => [
// the number here represents seconds, so the formula is: 5 hours * 60 minutes * 60 seconds
'interval' => 5 * 60 * 60,
'display' => esc_html__('Every Five Hours'),
],
]);
});
Añadir un nuevo trabajo recurrente
Para añadir un nuevo trabajo Cron necesitamos añadir un nuevo shortcode y adjuntar un horario al shortcode. El intervalo (el segundo argumento de la función wp_schedule_event()) debe ser uno de los intervalos predeterminados, o algún nombre personalizado que puede añadir utilizando el fragmento de código anterior.
add_action('YOUR_NAME_HERE', function () {
/* your job here
you can use all the WordPress features and functions
e.g. wp_insert_post() */
});
// we must check that the event wasn't scheduled as each call creates a new one
// otherwise, if we've skipped the check it'll create a new event for each user request
if (!wp_next_scheduled('YOUR_NAME_HERE')) {
/* the first argument is the timestamp which controls when the job
will be run for the first time
the next argument reflects the chosen interval */
wp_schedule_event(time(), 'hourly', 'YOUR_NAME_HERE');
return;
}
En el código anterior hemos creado un trabajo vacío que Cron ejecuta una vez por hora.
Añadir un nuevo trabajo único
El ejemplo anterior añade un trabajo que Cron ejecuta de forma recurrente. Pero también tiene la opción de programar un único trabajo. Para ello, debe utilizar la función wp_schedule_single_event() en lugar de la función wp_schedule_event(). Puede aceptar dos (2) tipos de argumentos: timestamp con la próxima hora de ejecución y el hook que contiene el job. Así que vamos a crear un trabajo que Cron ejecutará sólo una vez, después de 5 horas:
add_action('YOUR_NAME_HERE', function () {
/* your job here
you can use all the WordPress features and functions
e.g. wp_insert_post() */
});
// it's necessary to check that the event wasn't scheduled as each call creates a new one
// if you've skipped the check it'll create a new event for each user request
if (!wp_next_scheduled('YOUR_NAME_HERE')) {
// as before, the first argument is the timestamp which controls when the job will be run
// it's presented in seconds, so the formula is: 5 hours * 60 minutes * 60 seconds
wp_schedule_single_event(time() + 5 * 60 * 60, 'YOUR_NAME_HERE');
return;
}
Eliminar una tarea Cron
Puede eliminar un trabajo programado que haya añadido previamente. Es especialmente útil para tareas recurrentes. Para ello, llamaremos a la función wp_unschedule_event() con un par de argumentos. El primero debe contener la siguiente marca de tiempo para el evento (la obtenemos dinámicamente) y el segundo es el nombre de su trabajo.
El código siguiente elimina los trabajos únicos y recurrentes. Además, preste atención, que para los trabajos recurrentes, no sólo eliminará la programación o el siguiente evento, sino también todos los eventos futuros del trabajo.
$timestamp = wp_next_scheduled('YOUR_NAME_HERE');
if ($timestamp) {
wp_unschedule_event($timestamp, 'YOUR_NAME_HERE');
}
4. Cómo monitorizar Cron jobs
La información sobre todos los Cron jobs de WordPress se almacena en la Base de Datos. Esto significa que podemos obtener una lista de todos los trabajos programados y gestionarlos. Es algo importante para desarrolladores y propietarios de sitios web.
Si ha visto el esquema de la Base de Datos de WordPress, entonces sabrá que no hay una tabla separada para Cron. Todas las tareas Cron se almacenan dentro de una única opción en la tabla Opciones. Lo más probable es que ya conozca esta tabla, ya que cualquier buen desarrollador de WordPress conoce las tablas principales de la Base de Datos de WordPress. Este conocimiento es necesario para entender claramente los procesos internos. Si quiere comprobar y mejorar sus conocimientos, lea lo que debe saber un buen desarrollador de WordPress.
Pero mirar los datos serializados directamente a través de PhpMyAdmin no es la mejor idea. Por eso usaremos el plugin WP Crontrol que nos dará una interfaz de usuario clara. Usando la herramienta podemos depurar nuestros Cron jobs o comprobar los externos que son añadidos por plugins. Por ejemplo, creamos nuestro Cron job personalizado y lo ejecutamos inmediatamente usando la herramienta para asegurarnos de que funciona correctamente.
El plugin proporciona la interfaz para gestionar tanto los Cron jobs como los intervalos. Usarlo es muy sencillo. Instale y active el plugin y visite la opción "Herramientas" - "Eventos Cron" en su menú de administración.
Aquí puede gestionar Cron jobs (llamados Cron Events) y Cron Intervals (llamados Cron Schedules).
5. Plugins Cron y Caché
Lo importante a lo que hay que prestar atención es a la colaboración de los plugins Cron y cache de WordPress. La mayoría de los sitios web de WordPress utilizan algún plugin de caché para reducir el tiempo de respuesta. En general, el enfoque es bueno e importante para SEO. Además, la caché significa mucho para la optimización de la velocidad de WordPress. Pero en nuestro caso, también significa que nos saltamos la ejecución de PHP y devolver HTML.
Por defecto, WordPress Cron depende de las peticiones del usuario. El que WordPress Cron sea llamado o no durante las peticiones a páginas cacheadas depende del plugin que esté en uso. Según nuestra experiencia, los plugins de caché no llaman a WordPress Cron o lo hacen más raramente que cuando está instalado.
WordPress Cron seguirá siendo llamado durante las visitas del editor al panel de control, pero puede que no sea suficiente. Este enfoque está bien en caso de que sus Cron jobs no sean importantes y puedan retrasarse durante periodos más largos. De lo contrario, considere la segunda parte del artículo.
La solución descrita en la segunda parte del artículo, en relación con la fusión del sistema Cron y WordPress Cron, muestra los beneficios claros, por lo que si usted lo ha utilizado de esa manera entonces usted está listo y no necesita preocuparse por ello nunca más.
Se llama directamente al archivo wp-cron.php y WordPress Cron funcionará correctamente.
Conclusión
Hemos revisado las 5 cosas importantes sobre WordPress Cron. Recomendamos seguir la segunda parte (fusionar Cron del sistema y Cron de WordPress) para cada uno de tus sitios WordPress. Te ahorrará toneladas de dolores de cabeza en el futuro. Además, no te olvides de las herramientas que te permiten monitorizar tus Cron jobs. Son muy útiles.
Esperamos que nuestro artículo le haya sido útil, y que ahora tenga una idea clara de WordPress Cron y de cómo añadir sus propios Cron jobs utilizando los fragmentos de código.
Thank you for reading! to our monthly newsletter to stay updated on the latest WordPress news and useful tips.
Stuck with development or facing an issue?
WPLake offers affordable on-demand website development and design.
No matter the size of your project - contact us now, and we'll get it done for you!
Preguntas frecuentes Pon a prueba tus conocimientos
Modo FAQ
/
Modo de aprendizaje
- ¿Qué es Cron y por qué es importante para WordPress?
Cron es una herramienta de programación utilizada para automatizar tareas en WordPress, como la actualización de contenidos o la ejecución de scripts de mantenimiento, garantizando la ejecución puntual sin intervención manual.
- ¿Cuáles son las diferencias entre WordPress Cron y System Cron?
WordPress Cron se basa en las visitas de los usuarios para activar las tareas programadas, mientras que System Cron funciona de forma independiente en el servidor de alojamiento, proporcionando más fiabilidad y control sobre la ejecución de las tareas.
- ¿Cómo puedo integrar WordPress Cron con System Cron para mejorar la fiabilidad?
Configurando una tarea Cron del Sistema para llamar regularmente al Cron de WordPress, puede asegurarse de que las tareas programadas se ejecuten de forma fiable, independientemente de la actividad del usuario en el sitio.
- ¿Puedo añadir mis propias Cron jobs en WordPress?
Sí, WordPress permite a los desarrolladores añadir Cron jobs personalizados mediante fragmentos de código, especificando los intervalos y las tareas que deben ejecutarse, ya sea como eventos recurrentes o únicos.
- ¿Cómo puedo controlar y gestionar las Cron jobs en WordPress?
Herramientas como el plugin WP Crontrol proporcionan una interfaz fácil de usar para supervisar y gestionar los trabajos Cron, permitiendo a los desarrolladores depurar y optimizar las tareas programadas de forma eficaz.
- ¿Afectan los plugins de caché a la ejecución de Cron jobs en WordPress?
Sí, los plugins de caché pueden interferir con la ejecución de Cron jobs al omitir la ejecución de PHP en páginas almacenadas en caché. Es necesaria una configuración adecuada para garantizar que las tareas programadas se ejecutan sin problemas junto con los plugins de caché.
- ¿Cómo garantizar la fiabilidad de Cron y evitar retrasos en procesos críticos?
Combinando System Cron con WordPress Cron y utilizando herramientas de supervisión y gestión de tareas programadas, los propietarios de sitios web pueden garantizar la fiabilidad de Cron y evitar retrasos en procesos esenciales, como las actualizaciones de contenido y los scripts de mantenimiento.
Enlaces de contenido (14)
9.
wp-cli.org