7 days of WordPress plugins, themes & templates - for free!* Unlimited asset downloads! Start 7-Day Free Trial
Advertisement
  1. Code
  2. General

Conceptos sobre WP-Cron: Una introducción a la programación de tareas en WordPress

Read Time: 8 mins

Spanish (Español) translation by Eva Collados Pascual (you can also view the original English article)

Hoy vamos a revisar las funciones WP-Cron, ¡uno de los trucos menos conocidos que puedes usar por diversión! Su principal objetivo es establecer tareas de forma programática. Examinaremos algunos de sus posibles usos, y también identificaremos algunos problemas potenciales relacionados con el mismo y cómo solucionarlos.

WordPress es un software potente. Aunque, en ocasiones, su simplicidad puede dar una impresión errónea a los usuarios sin conocimientos técnicos sobre su funcionamiento interno. Esta simplicidad ha ido a favor de WordPress, ya que algo que aparentemente es sencillo y fácil de usar, es habitualmente adoptado por las masas. Sin embargo, es importante recordar que tras los bastidores existe un potente software capaz de hacer algo más que dar simplemente soporte a la creación y la gestión de un blog.

Una de las características de WordPress sobre la que menos se ha escrito es posiblemente WP-Cron (consulta aquí la página del Codex sobre WP-Cron). Ahora, aquellos de vosotros que hayáis manipulado un Cron genérico en un servidor Linux ya sabréis del poder de esta función.

¿Qué es Cron?

Cron es una instrucción de UNIX para programar la ejecución futura de tareas. Un cron se usa normalmente para programar una tarea que se ejecuta de forma periódica. Por ejemplo, podrías usar una función cron para enviar un aviso cada mañana. Se trata también de un proceso daemon, es decir, se trata de un proceso que se ejecuta continuamente, a la espera de que se den ciertos eventos.


Cómo funciona

Dado que WordPress está instalado en tantos entornos distintos, para que las cosas funcionen adecuadamente, los desarrolladores de WordPress implementaron un pseudo cron que incluye las funciones WP-Cron que ayudan a programar tareas como las siguientes:

  • Comprobar actualizaciones de temas y plugins
  • Publicar entradas programadas
  • Enviar pingbacks
  • ¡Y mucho más!

A diferencia de las tareas cron habituales, que se ejecutan en un momento concreto basándose en los ajustes del servidor, la función WP_Cron se ejecuta cada vez que alguien visita el sitio web basado en WordPress. Esto hace que un sitio web basado en WordPress se ejecute correctamente bajo distintas configuraciones de servidor al eliminar muchos de los requisitos específicos de éste. Durante la carga de cada página, WordPress comprueba si es necesario ejecutar una tarea WP-Cron. Si efectivamente es necesario, intentará hacer una solicitud HTTP del archivo wp-cron.php.

La razón para llamarlo wp-cron.php es porque algunas tareas (“Jobs” en inglés) podrían requerir bastante tiempo y no sería deseable hacer esperar al usuario que está solicitando la página en WordPress. Invocar a wp-cron.php nos ayuda a mantener la función WP-Cron ejecutándose como un proceso independiente en segundo plano sin que el usuario experimente un retraso en la carga de la página. Una vez se inicia la función WP-Cron, continuará ejecutándose hasta que todas las tareas requeridas se hayan completado o hasta que alcance el tiempo de ejecución que se haya establecido en la configuración del servidor.

Basándose en la configuración de tu servidor web, WP-Cron puede fallar a la hora de completar sus tareas o incluso no llegar a funcionar. Los sitios web con un alto tráfico se enfrentan a otro conjunto de problemas como la ejecución de múltiples procesos WP-Cron en bucles. Mucha gente maldice a WordPress por ello, pero no es necesariamene un problema inherente a WordPress. Cada situación es distinta y basándonos en esto podemos modificar WordPress para que lo ejecute de la mejor forma posible. A continuación encontrarás algunos de los problemas habituales a los que se enfrenta la gente y cómo solucionarlos.


Algunos problemas con WP-Cron

Problema: Ejecución de múltiples procesos WP-Cron en sitios web con un alto tráfico

Si eres administrador de un servidor o gestionas tu propio servidor con un firewall, habrás recibido emails provenientes de tu firewall indicando que un archivo "wp-cron.php" se ha estado ejecutando durante un largo periodo de tiempo. Esto sucede cuando el tiempo de ejecución del script es superior a 60 segundos. Como el proceso no ha finalizado, y los nuevos procesos han sido iniciados, están siendo ejecutadas varias instancias de los procesos WP-Cron en el servidor.

Esto no sucede en un sitio web con poco tráfico, pero si tu sitio web WordPress tiene usuarios simultáneos en un momento dado y el tiempo máximo de ejecución de un script tiene establecido un alto valor, tendrán lugar muchas instancias de ejecución de esta función WP-Cron. Hasta versiones recientes de WordPress, siempre se daban problemas en la ejecución en bucle de procesos cron sobre los mismos eventos.

NOTA: WordPress 3.3 nos proporciona incluso un bloqueo mejor del cron. Este artículo fue escrito justo cuando se estaba publicando WordPress 3.3, que presenta mejores características de bloqueo para cron y evita la ejecución en bucle de múltiples procesos WP-Cron sobre un mismo evento.

Problema: Las entradas programadas son omitidas

Otro problema ampliamente reportado que se da en algunos proveedores de alojamiento y algunos sitios web con tráfico bajo es que las entradas programadas no son publicadas. Como la función WP-Cron solo se ejecuta cuando una página es solicitada, si no hay solicitudes de página las tareas programadas no son ejecutadas.

NOTA: No hay ningún problema con WordPress. Además, desde la versión 3.x se han comunicado muchas menos incidencias. No obstante existen muchos plugins que se ocupan de este problema.

Problema: WP-Cron ni siquiera se llega a ejecutar

De nuevo, este es un problema de configuración del servidor. Debido a los ajustes inadecuados del servidor, los bloques de firewall impiden que los scripts se invoquen a sí mismos de modo que la función WP-Cron no funciona.


Posible solución a la mayoría de problemas de WP-Cron

Para evitar que se ejecuten múltiples instancias de WP-Cron se ejecuten en el servidor para un único sitio web, he intentado utilizar el método predeterminado de configuración de trabajos cron en un servidor Linux (Apache con cPanel como panel de control). El beneficio de este método es:

  • Te proporciona un mayor control sobre cuándo se ejecuta la función WP-Cron.
  • Evita los bucles múltiples.
  • Si eres propietario de un servidor que aloja muchos sitios web WordPress, esto podría reducir la carga del servidor.

Antes de meterte en esto, asegúrate de que tu servidor web te permite configurar tareas cron predeterminadas en Linux. La forma en la que se configura esto diferiría según el panel de control que te ofrezca tu servidor, pero en este artículo te proporcionaré una guía para configurar una tarea cron usando cPanel, un panel de control muy común hoy en día en servidores Linux.

Los pasos que seguí fueron los siguientes:

  1. Deshabilitar que el WP-Cron interno se ejecute durante la carga de la página.
  2. Configurar una función cron que realice una petición get al archivo wp-cron.php a intervalos regulares según tus preferencias.

Sí, así de sencillo. Sólo faltan dos pasos para que las cosas funcionen aún mejor.

NOTA: Antes de seguir este método, por favor, advierte que deshabilitar el WP-Cron interno puede dar como resultado que el sitio web no se ejecute adecuadamente según sea tu configuración o los plugins que estés usando.

1. Deshabilita la función interna WP-Cron

Abre el archivo wp-config.php en NotePad o en el editor que prefieras y añade las dos líneas siguientes en la parte superior.

Esto evitará que la función interna WP-Cron se ejecute y no llamará al archivo wp-cron.php.

2. Configura una función cron real desde el panel de control de tu servidor

Si tienes permiso para configurar tareas cron, tendrás que configurar un cron de la siguiente manera:

wget http://www.server.com/wp-cron.php?doing_wp_cron=1 > /dev/null 2>&1


Abajo tienes los pasos necesarios para hacer esto desde un servidor con cPanel.

1. Accede a cPanel con tu cuenta

Por lo general, el enlace es http://yourwebsite.com/cpanel o http://yourwebsite.com:2082. Una vez que introduzcas tu ID de usuario y contraseña y entres en el panel de control, desplázate hacia abajo hasta la "Sección avanzados".

2. Dirígete a la página para los ajustes cron

Haz clic sobre el icono "Tareas Cron" en la sección avanzada.

WordPress Login PageWordPress Login PageWordPress Login Page

3. Configurar una tarea cron

WordPress Login PageWordPress Login PageWordPress Login Page

En la nueva página encontrarás una sección "Añadir una nueva tarea cron", tal y como ves en la imagen de arriba. En el menú desplegable Ajustes generales, selecciona "Cada 5 minutos…" Una vez hayas seleccionado esto, el resto de los campos se rellenarán automáticamente con la información necesaria. En el siguiente paso te explicaré mi intención de establecer intervalos de hasta 5 minutos para la ejecución del script. 

En el campo de instrucciones, añade la siguiente línea. Recuerda añadir la dirección correcta del sitio web.

wget http://www.yourwebsite.com/wp-cron.php?doing_wp_cron=1 > /dev/null 2>&1

Por último, haz clic sobre el botón "Añadir nueva tarea cron".

A partir de ahora el servidor hará una solicitud del archivo wp-cron.php cada 5 minutos. La razón por la que he establecido esto a 5 minutos, es porque normalmente establezco la ejecución del script a 4 minutos en lugar de hacerlo a 60 segundos. Esto se hace para poder cargar archivos de imagen grandes, procesos de copia de seguridad, etc. Sin embargo, también puedes cambiar la configuración y elegir otras opciones para ejecutar el cron cada 1 minuto.

NOTA: Esto funciona bien en los sitios web WorPress habituales. Para aquellos que estéis usando un multisitio WordPress, podrían haber cosas adicionales necesarias así que, por favor, no emplees los pasos anteriores si estás gestionando un multisitio WordPress.


Conclusión

Si encuentras cualquier problema o tienes ideas nuevas o distintas, por favor, ¡comparte tu opinión con toda libertad a continuación!

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Scroll to top
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.