Cómo configurar WordPress para usar tareas Cron externas en SiteGround 

En este tutorial aprenderás a desactivar el Cron interno de WordPress, y a configurar uno externo como es el de SiteGround, para de esa forma mejorar la seguridad, la estabilidad y el rendimiento del WordPress .

¿Que es el Cron?

El cron es un cronometro que se activa cada cierto tiempo. Cuando el cron se activa hace que se disparen tareas en WordPress.

Digamos que el cron en WordPress es el director de una orquesta , el Cron es el que decide cuando se ejecutan las tareas que están programadas en WordPress.

Que son la tareas de WordPress

Las tareas son un grupo de acciones que están definidas por el WordPress o por sus plugins y que se usan para hacer procesos de muchos tipos y que ademas casi siempre suelen repetirse en el tiempo, ósea una tarea puede ejecutarse o dispararse más de una vez.

Ejemplos de tareas que dispara el cron, ósea que se activa o se ejecutan porque el cron lo ha solicitado:

  • Hacer una copia de seguridad todos los días a las 12 de la noche.
  • Limpiar la base de datos, la papelera de los comentarios.
  • Detectar se el wordpress esta usando https o no.
  • Actualizar los plugins, temas y hasta el propio WordPress si fuese necesario.

¿Por qué usar un cron externo como el de SiteGround y no el propio que tiene incorporado el propio WordPress?

Usamos un cron externo y no el de WordPress para controlar con seguridad el tiempo exacto al que deben de dispararse las tareas que tiene que hacer nuestro CMS.

Problemas de usar el cron interno de WordPress

Usando el cron interno de wordpress no sabremos cada cuanto tiempo se va a disparar y por ese mismo motivo no sabras si los plugins se están actualizando, si se están haciendo las copias de seguridad etc., en resumen no vas a saber si se están ejecutando las tareas que tiene programadas por defecto el WordPress o las tareas que han programado los propios plugins.

El cron interno de WordPress se dispara cada vez que WordPress recibe una visita de un usuario, y aquí es donde reside el principal problema del uso del cron interno.

Cada vez que la web tenga un usuario visitándolo hay un cierto numero de tareas que se van a ejecutar. Si la web tiene pocos usuarios no deberías de preocuparte pero si la web tiene un numero de usuarios respetables entonces significa que en cada visita el WordPress esta quemando muchísimos recursos del hosting y por tanto perjudicado su rendimiento y seguridad.

Lista de Pasos para configurar el cron externo de WordPress en el hosting de SiteGround

Primero desactivar el cron interno de WordPress

Desactivar el cron interno de WordPress es muy fácil, consiste en añadir la linea de código que te dejo mas abajo el el fichero wp-config.php .

define('DISABLE_WP_CRON', true);

Segundo averiguar cual es la url de la ubicación del WordPress

Para saber cual es la url de la ubicación del directorio de WordPress, vamos al administrador del WordPress, luego a Ajustes, luego a Generales, y ahi puede leer donde pone «Dirección de WordPress (URL)» la url de tu wordpress.

https://www.tu-dominio.com
averiguar cual es la url de la ubicacion del wordpress

Averiguar cual es la URL del directorio de ubicación WordPress

Esta es otra forma de llamar al cron y es la que uso yo.

ubicacion del directorio de wordpress.001

Una vez sepamos cual es la url real donde esta almacenado el wordpress la pegamos en el código que te dejo continuación.

php -q /home/customer/www/electronica.school/public_html/wp-cron.php

Evidentemente usa tu dominio y no el mio, te dejo una imagen para que sepas como hacerlo.

poner la url del wordpress en el codigo del cron.002

Tercero activar el cron externo en SiteGround

Ahora en la web de SiteGround desde Site Tools iremos donde pone Desarrolladores, Trabajos Cron.

entrar en site tool cron externo en siteground

En el Paso 3 vamos a pegar nuestra url con el código que activa el cron en el WordPress.

El comando que uso yo para llamar al cron de mis webs en SiteGround es el siguiente:

php -q /home/customer/www/electronica.school/public_html/wp-cron.php

Como me consta que puedes hacer este tutorial en otros hosting te dejo otros comandos por si el mi no te funciona para que así hagas pruebas.

wget -q -O - https://tudominio.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
wget -q -O – -t 1 http://tudominio.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
php -q /home2/mbglobal/public_html/mbglobal/wp-cron.php

Recuerda poner la url exacta de tu dominio respetando si usas o no las tres www.

En el Paso 4 donde pone intervalo, ponemos «Seleccionar manualmente».

En el Paso 5 ponemos el tiempo que dispara el cron, podemos poner una vez al dia , una vez al año etc…

Si la web tiene muchas visitas pondremos que se dispare el cron cada 5 minutos.

Codigo para ajustar el cron de SiteGround cada 5 minutos:

codigo para ajustar el cron de siteground cada 5 minutos
*/5 * * * *

Si la web no tiene apenas trafico tambien es bueno poner un cron externo, para así asegurarnos de que se dispara el cron y se actualizan los plugins, recuerda que si no hay visitas, los plugins no se van actualizar porque el cron no esta disparando las tareas en el WordPress.

Codigo para ajustar el cron de SiteGround cada dia a las 3 am:

codigo para ajustar el cron de siteground cada dia a las 3 am
0 3 * * *

Ejemplos de como se ajusta el tiempo del cron de linux en SiteGround

# ┌───────────── minutos (0 - 59)
# │ ┌───────────── horas (0 - 23)
# │ │ ┌───────────── dia del mes (1 - 31)
# │ │ │ ┌───────────── mes (1 - 12)
# │ │ │ │ ┌───────────── dia de la semana (0 - 6) (Lunes to Sábado)
# │ │ │ │ │
# │ │ │ │ │
# │ │ │ │ │
# * * * * * comando de linux a poner en SiteGround

De todas formas en el momento que escribas este dato en el formulario del cron SiteGround te muestra una ayuda con el valor del tiempo de ejecución del cron.

Tambien existen en internet paginas generadores de cron online como https://crontab.cronhub.io

Si quieres que tu hosting te envié un email cada vez que lanza un cron tienes que quitar la parte final del código donde pone:

>/dev/null 2>&1

También es importante poner en Site Tool el email de errores del cron.

recibir alertas de errores del cron en el email

Debes de poner un email para que se hay un error en la ejecución del cron SiteGround te puedas avisar, en este email ademas te informa del fallo con pistas.

ejemplo de error de corn enviado al email

Prohibir la ejecución del wp-cron.php de WordPress.

Esto solo es necesario en servidores o en hosting de mala calidad o en instalaciones mal echas, esto no es necesario en hosting de calidad como SiteGround o Kinsta, consiste en cambiar los permisos de fichero wp-cron.php a 664.

cambiar los permisos del fichero wp cron.php

Limitar el tiempo de activación del cron interno de WordPress

Otra acción interesante que puedes hacer y menos agresiva es seguir usando el cron de WordPress sin usar ninguna linea que lo desactive y poner una limitación al tiempo que debe de transcurrir entre cada petición que hace el cron interno, es una solución genial y ademas funciona en todos los hostings.

Para limitar la ejecución interna del wp-cron.php durante ciertos segundo puedes añadir la siguiente linea de código en el wp-config.php, la linea de abajo limita la ejecución del cron interno a 5 minutos ósea 300 segundos.

define( 'WP_CRON_LOCK_TIMEOUT', 300 );

Creo que añadir esa linea de código es lo mínimo que puedes hacer para mejorar el funcionamiento de cron en WordPress.

Usar cron interno de WordPress y externo

Otra idea intersante es usar el cron de WordPress y tambien usar un cron externo, ósea usar los dos mundos a nuestro favor.

El cron de wordpress limitamos su ejecución con WP_CRON_LOCK_TIMEOUT cada 5 minutos.

Y el cron externo lo podemos ajustar para que se ejecute cada hora.

¿Como saber si el cron de WordPress esta trabajando bien?

Después de poner los ajustes de Cron para que se ejecuten de forma externa en WordPress te vas hacer la pregunta de ¿Como saber si el cron de WordPress esta ejecutándose bien?

Para saber si el Cron de WordPress esta funcionando bien puedes instalar el plugin: Cron Logger , despues de instalar este plugin te muestra una lista con las horas a las que se ha ejecutado el cron, es sencillamente genial.

ver un log de ejecucion del cron en wordpress

Otros comandos utiles para llamar al cron si todo lo que hemos visto falla.

$ lynx -source https://williamjxj.wordpress.com/feed/ >index.html
$ curl https://williamjxj.wordpress.com/feed/ >index.html
$ wget https://williamjxj.wordpress.com/feed/

Boloquear el acceso desde fuera al wp-cron.php

Si pones el siguiente código en tu fichero .htaccess las webs y servidores que quieran intentar leer o ejecutar los ficheros wp-trackback.php xmlrpc.php wp-cron.php no podrán hacerlo, para poder acceder a los ficheros wp-trackback.php xmlrpc.php wp-cron.php tienes que hacerlo desde tu propio servidor.

Yo te recomiendo que lo hagas porque es una practica habitual hacer ataques al cron en días importantes donde hay muchas ventas en tiendas.

<IfModule mod_rewrite.c>
    Options +FollowSymLinks
    RewriteEngine On
    RewriteCond %{QUERY_STRING} (^|&)doing_wp_cron= [NC]
    RewriteRule (.*) /$1? [R=301,L]
</IfModule>
RewriteCond %{REMOTE_ADDR} !^127\.0\.0\.1
RewriteCond %{REQUEST_URI} wp-trackback.php|xmlrpc.php|wp-cron.php [NC]
RewriteRule .* - [F,L]

Llamar al wp-cron.php usando el comando de php

Existen 4 formas de llamar al wp-cron.php desde el cron de nuestro servidor

php wp-cron.php
php -q wp-cron.php
php -c wp-cron.php
php -f wp-cron.php
  • php -q Se usa para no pedir header es un modo silencioso, y es el que uso yo por ejemplo en SiteGround o en Prestashop.
  • php -c Se usa para indicar donde esta el fichero php.ini, su ruta
  • php -f Analiza y ejecuta el archivo especificado. La opción -f es opcional y puede ser omitida – proporcionando sólo el nombre del archivo a ejecutar es suficiente

Si te fijas la que uso yo para llamar al cron de WordPress es php -q para no obtener ninguna cabecera de nada, vamos una llamada limpia.

php -q /home/customer/www/electronica.school/public_html/wp-cron.php

Puntos importantes a tener encuesta si falla nuestro cron.

  1. Poner un email que nos avise cuando falla el cron con el error.
  2. Desactivar todos los plugins de cache.
  3. Desactivar todos los antivirus incluso SiteGround Security si lo tienes.
  4. Hacer pruebas desde un servicio de cron externo para lanzar nuestros comandos de cron, un servicio de cron externo gratis y muy bueno es : https://cron-job.org/en/ .
  5. Poner el plugin de log del cron que indico más arriba .
  6. No bloques los agentes en blanco, NO Block empty/blank user agents.

Si tienes problemas con el envío de correos desde el plugin LMS Leardash debes de configurar el cron a 1 minuto.

* * * * * wget -q -O - 'https://yoursite.com/wp-cron.php?doing_wp_cron&cron=true'

Esto es todo lo que puedes aprender del uso del Cron de WordPress en SiteGround, si encuentro algo más lo pondré para mantener actualizado este articulo .

Escribe en los comentarios tus dudas y ¿como usas tu el cron de WordPress?


Foto de Perfil de Juan Luis Martel

Juan Luis Martel.

Profesional en Tecnologías Integradas - Desarrollo Web y Electrónica.

Las Palmas de Gran Canaria, España

Soy un apasionado de la programación con experiencia en Wordpress, PHP, PIC, Microcontroladores y ASM. Además, soy Técnico Especialista en Electrónica y también tengo experiencia como profesor en este campo. Mi pasión por la electrónica me ha llevado a combinar mis habilidades en programación con mi conocimiento técnico, lo que me permite crear soluciones innovadoras y eficientes en mis proyectos de paginas webs y de electrónica.

¡No te vayas sin valorar el contenido!

¡Haz clic en una estrella para puntuarlo!

Promedio de puntuación 0 / 5. Recuento de votos: 0

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.

Ya que has encontrado útil el contenido...

🙏 Ayúdame y compártelo en tus redes sociales ¡Significa mucho para mí! - Gracias

¡Siento que el contenido no te haya sido útil o gustado! 😔

¡Déjame mejorar este contenido!

Dime, ¿cómo crees que puedo mejorar este contenido? 🙏 ¡Significa mucho para mí! - Gracias

Deja un comentario