Curiosidades, entretenimiento y explicaciones cuasi-científicas

¿Por qué desactivar wp-cron de WordPress?

Cómo quitarlo y sustituirlo por el Cron del servidor

Para todos los que tenga un blog alojado en WordPress.org, seguro que cada vez os vais especializando en materia de administración y solución de errores. No sólo porque os despierte la curiosidad de «como funciona todo» si no por solucionar errores que se presentan a las primeras de cambio. Vamos a ver en qué consiste el wp-cron de WordPress.

Por cierto, si no tenéis un blog, lo podéis crear muy fácilmente con este tutorial.

Seguro que si tenéis una página web en WordPress alguna vez os ha pasado que, al programar una entrada, no se publica a la hora estimada y aparece el siguiente mensaje:

Programación perdida

Quizá no le demos mucha importancia y sigamos con nuestro blog como quien no quiere la cosa. Quien sabe, lo mismo ha sido algo esporádico porque se «ha bloqueado» el archivo wp-cron al intentar realizar un montón de tareas.

Sin embargo, si eres de los que necesitan programar entradas asiduamente porque no te encuentras delante del ordenador cuando quieres que aparezcan, si este problema continúa, te vas a volver loco buscando la solución.

¿Qué funciones realiza el wp-cron de WordPress?

No sólo realiza la tarea de programar algo, también realiza cosas mucho más interesantes e imprescindibles como:

  • Buscar actualizaciones de WordPress, plugins, temas, etc.
  • Ejecutar copias de seguridad, en el caso de que lo hayas programado mediante un plugin.
  • Poder enviar pingbacks.

Einstein curiosidades

Pues sí, la verdad que sí. Imprescindible pero también… sustituible.

¿Por qué es conveniente sustituirlo, cuando se pueda?

Porque cuando un blog empieza a crecer y crecer, a recibir visitas, a funcionar con bastantes plugins, a programar entradas y demás, empieza a sobrecargarse. El wp-cron trabaja como un condenado y comienza a cargar el CPU del servidor.

Cuando pasamos el límite que tenemos establecido con nuestro hosting nuestra página web «peta» y aparece el temido mensaje 503: servicio no disponible.

Créenos, esto a la larga suele pasar. Nosotros aparentemente sólo lo percibimos con la pérdida de las entradas programadas (que puede llegar a ser un verdadero incordio).

La primera solución, un plugin 

Esta es la solución más fácil, menos conflictiva y sí.. más vaga. El problema es que estás sumando un plugin más a tu larga lista, y algún día puede pasarte factura. Estás sobrecargando tu página web con plugins que pueden sustituirse fácilmente por código o actuaciones en el Cpanel. Aun así, te decimos qué plugin es:

WP Missed Schedule

Si te decides por este plugin, mejor no sigas leyendo. Eso sí, te voy a llamar ¡¡VAGO!! 

Si por el contrario quieres disponer de una mejor solución del wp-cron que no utilice plugin. Vamos al lio:

Así, que vamos  a desactivarlo. ¿Cómo lo hacemos?

Lo primero de todo, desactivar el wp-cron 

Necesitamos acceso a nuestro FTP, el cuál podemos acceder desde un programa externo, como Filezilla, o a través de nuestro Cpanel.

Buscamos el archivo wp-config.

Lo abrimos y buscamos estas líneas, comunes en todos los archivos de todas las webs:

// ** Ajustes de MySQL. Solicita estos datos a tu proveedor de alojamiento web. ** //
/** El nombre de tu base de datos de WordPress */
define(‘DB_NAME’, ‘db_name’);

/** Tu nombre de usuario de MySQL */
define(‘DB_USER’, ‘db_user’);

/** Tu contraseña de MySQL */
define(‘DB_PASSWORD’, ‘db_pass’);

/** Host de MySQL (es muy probable que no necesites cambiarlo) */
define(‘DB_HOST’, ‘localhost’);

/** Codificación de caracteres para la base de datos. */
define(‘DB_CHARSET’, ‘utf8’);

/** Cotejamiento de la base de datos. No lo modifiques si tienes dudas. */
define(‘DB_COLLATE’, »);

Vale. Justo aquí debajo de esto añadimos la siguiente línea:

/** Activa/desactiva Cron */
define(‘DISABLE_WP_CRON’, true);

Guardamos el arhivo y ¡listo! Ya no nos funciona el wp-cron de WordPress.

Lógicamente, esto no ha terminado. Ahora ni nuestras entradas programadas se publicarán, ni se actualizará nuestro WordPress, ni los temas, ni los plugins… vamos, un auténtico desastre.

Ahora hay que sustituirlo.

Nos tenemos que ir al Cpanel de nuestro hosting. Es fácil acceder y no habrá problemas. Bueno, con 1&1 y alguno más si. Sorry 🙁

cron jobs sin wp-cron

Con esto estamos sustituyendo de forma eficaz y sin sobrecargar el CPU del servidor el wp-cron (un pseudo cron, por así decirlo) que lleva instalado WordPress. No es difícil de programar, ni mucho menos, ya lo verás. Básicamente, le tenemos que decir cada cuando queremos que se «actualice» la web.

Es decir, si ponemos que se active el cron cada 30 min, cada media hora va a buscar si hay programaciones pendientes, temas, plugins o pingbacks que actualizar o enviar.

Por eso, dependiendo de la naturaleza de tu blog, tendrás que aumentar o reducir el tiempo. Si es para programar entradas te interesa que sea cada poco tiempo, 1 hora, 30 minutos o incluso menos (dependiendo de la frecuencia con la que actualices contenido). Si por ejemplo tienes una tienda e-commerce en la que necesitas actualizar los precios, con 1 vez al día es suficiente. No sé, es relativo. 🙂

Nueva tarea del cron job

Donde pone configuraciones comunes, podemos seleccionar automáticamente el rango de actualización. Por ejemplo, imagina que lo vamos a hacer cada 30 minutos.

actualizar tarea cron job wp-cron

Lo que es lo mismo, 2 veces por hora. Vale, seguimos. No queda nada.

Vemos ahí abajo que pone Comando, y sí, hay que rellenarlo con algo. ¿Con qué? Con esto. Copia y pega, simplemente:

wget -q -O – -t 1 http://tuweb.es/wp-cron.php?doing_wp_cron >/dev/null 2>&1

El dev/null sirve para que no te envíen un email cada vez que hacen una actualización. Lo podemos quitar si queremos comprobar que realmente está funcionando el cron, pero si lo vamos a hacer cada 30 min, es una auténtica locura. Total, lo vamos a comprobar viendo si las programaciones se pierden o no.

¡Una cosa!

En el código ves que pone http://tuweb.es, lógicamente, eso hay que sustituirlo por tu web.

Si tu web se llama. http://adoramosaeinstein.es (espero que no exista la página 🙂 ), entonces el código se te quedaría así, a modo de ejemplo.

wget -q -O – -t 1 http://adoramosaeinstein.es/wp-cron.php?doing_wp_cron >/dev/null 2>&1

También lo puedes poner con el www (http://www.adoramosaeinstein.es/wp-cron…..)

Ahora le damos a Agregar nueva tarea de Cron. ¡Listo!

El resultado, en las Tareas de Cron actuales sería este:

resultados tareas actuales cron job

¡Ya está!

Ahora tenemos que comprobar que funciona, por ejemplo, programando una entrada y viendo si se publica. Eso sí, no podemos alarmarnos si vemos que no se publica al instante, pues el cron se ejecuta cada media hora. Si quieres que lo haga, reduce el tiempo de activación del cron, siguiendo el mismo procedimiento que hemos hecho en este tutorial.

Si te ha gustado, compártelo con las redes sociales para que nadie vuelva a tener problemas con el wp-cron. 🙂

Un saludo. La vida cotidiana.

 

 

 

¡Vota este artículo!

One Comment

  1. Lancaster

    16 junio, 2015 at 10:07

    A veces las empresas de hosting no permiten configurar un trabajo cron. EasyCron.com es una manera libre y fácil de configurar crons y tener control sobre ellos.

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *