Cron es una utilidad de Unix/Linux que suele utilizarse para programar comandos o un script en un servidor web que se ejecuta en segundo plano. Un cron job es la propia tarea, que se utiliza para programar tareas a horas, fechas o intervalos fijos periódicos. Normalmente se trata de tareas repetitivas que se automatizan para ahorrar tiempo. En WordPress, esto es manejado por WP-Cron, que se utiliza para simular un cron del sistema.

Algunos ejemplos de un cron job de WordPress pueden ser programar la publicación de un post o ejecutar un plugin de copia de seguridad en un horario predefinido. Hoy vamos a ver cómo crear, modificar y ejecutar fácilmente una tarea cron de WordPress.

Cómo Configurar un Cron Job en WordPress

Es importante tener en cuenta que WP-Cron es ligeramente diferente a un cron del sistema y cada uno tiene sus propios pros y contras. Por ejemplo, WP-Cron se basa totalmente en intervalos, mientras que un cron del sistema se basa en tiempos específicos. Además, un WP-Cron sólo funciona cuando se carga la página (back-end o front-end), lo que puede ser menos fiable. Los intervalos por defecto proporcionados por WordPress son cada hora, dos veces al día y diariamente.

Para programar eventos de WP-Cron tienes que crear hooks personalizados. Te recomendamos que consultes el manual oficial del plugin de WordPress, que tiene una guía increíble sobre la programación de eventos WP Cron. Si buscas una forma alternativa de configurar un cron del sistema con WordPress, te recomendamos que consultes el artículo de Tom Mcfarlin sobre la definición de un cron job de WordPress. Y para los que quizá no son tan avanzados, vamos a explorar cómo usar fácilmente WP-Cron con el conocido plugin WP Crontrol que es gratuito. Esto te permite ver y controlar lo que está sucediendo en el sistema WP-Cron.

Plugin WP Crontrol WordPress
WP Crontrol

WP Crontrol tiene más de 200.000 instalaciones activas con una impresionante valoración de 4,5 sobre 5. A mucha gente de la comunidad de WordPress le encanta este plugin.

Este plugin es super útil. Muestra lo que los CRON jobs deben ejecutar, un primer paso excelente en la comprensión de lo que está pasando y si está funcionando o no. Ahí tiene 5 estrellas. Además, puede crear nuevos cron jobs y activar los ya existentes para que se ejecuten, 5 estrellas extra. —Josh, creador de Caldera Forms

Puedes descargarlo desde el repositorio de WordPress o buscándolo en tu panel de control de WordPress en plugins, «Añadir Nuevo». Las características de WP Control incluyen:

  • Posibilidad de ver todos los eventos cron junto con sus argumentos, recurrencia y próxima hora de ejecución.
  • Editar, eliminar y ejecutar inmediatamente cualquier evento cron.
  • Añadir nuevos eventos cron.
  • Añadir, editar y eliminar programas cron personalizados.

Cron del Servidor

Si eres cliente de Kinsta, también tenemos un cron job del servidor que se ejecuta en todos los sitios cada 15 minutos. Consulta nuestro artículo sobre cómo gestionar los cron del servidor en Kinsta.

Programación WP-Cron

Una vez activado, puedes cambiar los horarios de las tareas Cron de WordPress en «Programaciones Cron» desde la configuración de tu panel de control de WordPress. Fíjate en que el plugin añade una programación adicional por defecto de carácter semanal. También puedes añadir horarios adicionales en segundos, como 21600 segundos cada 6 horas.

Captura de pantalla de la programación de WP-Cron
Programación de WP-Cron

Estos intervalos también se pueden añadir con código utilizando un filtro, como por ejemplo

add_filter( 'cron_schedules', 'example_add_cron_interval' );

function example_add_cron_interval( $schedules ) {
 $schedules['five_seconds'] = array(
 'interval' => 5,
 'display' => esc_html__( 'Every Five Seconds' ),
 );

return $schedules;
 }

Eventos WP-Cron

También puedes utilizar el plugin para ver los Cron jobs de WordPress que ya están programados. En Herramientas haz clic en «Eventos Cron» Muchos de los nombres de las acciones son fácilmente reconocibles, ya que deben coincidir con parte del nombre del plugin, como «woocoomerce_cleanup_sessions» o «gravityforms_cron»

Eventos WP-Cron
Eventos WP-Cron

Puedes ejecutar un evento Cron inmediatamente simplemente haciendo clic en «Ejecutar Ahora» junto al nombre de la acción. Esto puede ser útil a la hora de solucionar problemas, ya que es posible que tengas que ejecutar un evento Cron varias veces.

Evento Cron ejecutado con éxito
Evento Cron ejecutado con éxito

Modificar un Evento Cron

También puedes editar los eventos Cron existentes haciendo clic en «Editar» junto al nombre de la acción. Entonces puedes cambiar el nombre de la acción, los argumentos, la próxima ejecución y la recurrencia programada. Sin embargo, ten cuidado con esto, ya que muchos plugins dependen de sus Cron jobs para funcionar correctamente.

Modificar evento Cron
Modificar evento Cron

Añadir Evento Cron

También puedes añadir eventos Cron. En este ejemplo, vamos a añadir el Cron job de WordPress para el plugin Disqus. Es posible que muchos quieran hacer esto para alterar la frecuencia de sincronización o si están teniendo problemas con los comentarios de sincronización de ida y vuelta. La documentación de cada desarrollador de plugin de terceros debe tener el nombre de su evento cron, o más bien el nombre de la acción. En este caso es «dsq_sync_forum» que está siendo utilizado por el plugin.

Si estás creando uno desde cero, necesitarás un hook de acción correspondiente en algún lugar de tu código, como tu archivo functions.php. Este es el ejemplo que da WP-Crontrol:

add_action( 'my_hookname', 'my_function' );

El siguiente paso es escribir tu función.

function my_function() {
    wp_mail( '[email protected]', 'WP Crontrol', 'WP Crontrol rocks!' );
}

Para Disqus, primero añadimos una nueva programación cron de 600 segundos (10 minutos). A continuación, hacemos clic en «Añadir Evento Cron» e introducimos «dsq_sync_forum» como nombre de nuestra acción, elegimos la siguiente hora de ejecución y la recurrencia de 10 minutos que acabamos de crear. Luego hacemos clic en «Añadir evento Cron» Ahora se ejecutará automáticamente cada 10 minutos para que sincronicemos manualmente los comentarios de Disqus con nuestra base de datos de WordPress.

Añadir Cron job de WordPress
Añadir Cron job de WordPress

¡Y eso es todo! Es realmente muy fácil de usar.

WP-Cron WP-CLI

También puedes gestionar los eventos de WP-Cron y o un Cron job de WordPress en WP-CLI. Por ejemplo, el siguiente comando te dará tu lista actual de eventos cron.

wp cron event list

Lista de eventos wp-cron

Consulta la documentación oficial de WP-CLI cron para ver comandos y parámetros adicionales.

Cómo Añadir un Cron Job Usando cPanel

Si utilizas un alojamiento web que te da acceso a una cuenta de cPanel, puedes utilizar el panel de control para configurar cron jobs. Para ello, entra en tu cuenta de cPanel y ve a Avanzado > Cron Jobs:

Encontrar Cron jobs en cPanel
Cron Jobs en cPanel

La página de configuración de Cron Jobs incluye opciones para configurar las notificaciones de los cron jobs y para crear otros nuevos. Para añadir un cron job, desplázate hasta la sección Añadir Nuevo Cron Job.

Aquí podrás configurar la frecuencia del comando:

Configurar la frecuencia de la demanda
Añadir nuevo Cron Job

El menú de Configuración Común incluye varias opciones preconfiguradas, que van desde una vez por minuto hasta una vez al año. Puedes utilizar cualquiera de estas opciones o modificar los campos de abajo para introducir un valor personalizado:

Introducir valores personalizados
Introducir valores personalizados

Una vez configurada la frecuencia de la tarea cron, puedes añadir el comando que ejecutará en el campo Comando. Guarda el cron job haciendo clic en Añadir Nuevo Cron Job. Ahora, aparecerá bajo la lista de Cron Jobs Actuales en la parte inferior de la página.

Cómo Añadir un Cron Job en NGINX

Añadir un cron job en NGINX es relativamente sencillo si te sientes cómodo usando el terminal y escribiendo scripts. Para empezar, abre el terminal e introduce el siguiente comando:

Sudo crontab -e

Esto abrirá el archivo de configuración del cron. Cada línea del archivo incluye una única tarea cron que debería tener el siguiente aspecto

0 13 * * * /var/www/public_html/cron.php >/dev/null

Para añadir un nuevo cron job en NGINX, tendrás que entender lo que hace ese comando. Los primeros números y asteriscos especifican cuándo debe ejecutarse la tarea cron.

Cada número o símbolo representa los siguientes valores, en orden de aparición de izquierda a derecha:

  1. Minutos
  2. Hora
  3. Día del mes
  4. Mes
  5. Día de la semana

Este comando indica a NGINX que ejecute el archivo cron.php todos los días a las 13 horas en punto. Usamos asteriscos para el resto de los valores porque no son necesarios para este cron job específico, pero tu elección puede variar.

Además de especificar el archivo que debe ejecutarse, el comando también indica al cron job que descarte cualquier salida, como los errores, con el añadido >/dev/null . Alternativamente, puedes elegir guardar cualquier salida de este tipo en un archivo de registro.

Cuando hayas terminado de modificar el archivo de configuración del cron, puedes guardar los cambios y cerrarlo. Ahora tu servidor NGINX ejecutará ese cron job con la configuración que hayas establecido para él.

Cómo Añadir un Cron Job en Kinsta

Hay dos maneras de añadir un cron en Kinsta. La primera consiste en acceder a tu sitio web mediante SSH y ejecutar el comando crontab -e .

Una vez que ejecutes ese comando, Kinsta te preguntará qué editor quieres utilizar. Entonces abrirá el archivo de configuración del cron usando ese editor.

Puedes añadir cron jobs al archivo de configuración creando nuevos comandos en líneas separadas. Un comando de cron job debería tener el siguiente aspecto:

0 13 * * * /var/www/public_html/cron.php >/dev/null

Puedes leer más sobre cómo estructurar los comandos cron en la sección anterior, donde vimos cómo utilizar el comando crontab -e en NGINX. Si prefieres no añadir el cron job manualmente, puedes pedir al personal de soporte de Kinsta que lo haga por ti.

Ten en cuenta que Kinsta no puede editar las tareas cron por ti y que simplemente cargaremos los comandos tal y como nos los proporciones. Si necesitas ayuda para configurar el comando cron, te recomendamos que consultes esta documentación sobre crontab.

Cómo Desactivar WP-Cron

En algunos casos, el uso de la función WP-Cron puede causar problemas en tu sitio web. WP-Cron no es un cron job «real», sino una función que imita su funcionamiento. En lugar de ejecutarse continuamente, WordPress ejecuta el script wp-cron.php cada vez que se carga una página.

Este enfoque puede causar problemas con los sitios web de alto tráfico, ya que tendrás que dedicar recursos a ejecutar wp-cron .php en cada carga de página. Si el script no se ejecuta debido a la carga de la página, tus comandos programados podrían no ejecutarse, ya que wp-cron .php no está «comprobando» los intervalos.

Si tienes problemas con WP-cron, puedes desactivar la función añadiendo el siguiente código al archivo wp-config.php de WordPress:

define('DISABLE_WP_CRON', true);

Guarda los cambios en el archivo y ya está. Sin embargo, si decides desactivar WP-Cron, tendrás que configurar una alternativa utilizando cualquiera de los métodos anteriores de este tutorial.