Métodos para Cron Job en Cpanel

Hoy vamos a ver varios métodos para ejecutar las Cron Jobs en el Cpanel de nuestro hosting.

 

La mejor forma de ejecutar una cron job en cpanel suele ser directamente con PHP. Normalmente con el comando php invocamos un archivo .php que ejecuta la tarea cron.
 

Aunque existen otras formas de lograr la ejecución de trabajos Cron.

 

 
En este artículo:
 

 

 

1. INTRODUCCIÓN

 
Los CRON Jobs son trabajos programados que podemos crear desde nuestro cpanel que controla el host que aloja nuestra web. En el caso de los sitios WordPress, se suele invocar al archivo wp-cron.php.
 


Cada hosting es diferente y puede que alguno de los métodos aquí mencionados no funcione o funcionen mejor unos que otros.
También tenemos que tener en cuenta la ruta y la forma de utilizar los comandos.
 


Cuando usemos PHP, es posible que delante de todo debamos utilizar la ruta completa:

/usr/local/bin/php

 
o que simplemente usemos la ruta relativa utilizando ya el comando en cuestión, por ejemplo

php /home/miusuario/public_html/wp-cron.php

 

 

Vamos a ver un ejemplo de cada, y el resultado que obtenemos en cada caso (nos llegará al email configurado en nuestro panel de hosting para las CRON)

 

1.1 ** SI USAMOS CLOUDFARE **

 
También hay algunos casos en los que usamos cloudfare.
 
En algunos casos el cron con curl no funciona correctamente cuando utilizamos Cloudfare. Info Aquí.
 

 

2. Tenemos tres métodos principales para ejecutar las tareas Cron

 

  • a) cron con PHP
  • b) cron con WGET
  • c) cron con CURL

Se puede hacer que cron envíe un correo electrónico cada vez que ejecute un comando. Si no desea que se envíe un correo electrónico para un trabajo de cron individual, puede redirigir la salida del comando a /dev/null de la siguiente forma:

mycommand >/dev/null 2>&1

 
En este caso, vamos a hacer que Cron nos envíe un mail cada vez que ejecute la tarea programada, así podremos comprobar que funciona.
 

 

2.1 – CREAMOS NUEVO TRABAJO CRON EN CPANEL

 
Primero entraremos en nuestro CPANEL y crearemos las respectivas tareas CRON. En la siguiente imagen vemos la creación de una tarea CROn con PHP:

nuevo cron job en cpanel

 

 

2.a – Cron con PHP

 
Cron con /usr/local/bin/php (ruta absoluta):
 

/usr/local/bin/php /home/miusuario/public_html/wp-cron.php

 
/usr/local/bin/php /home/miusuario/public_html/wp-cron.php

 

o simplemente (ruta relativa):

CRON con PHP:

php /home/miusuario/public_html/directorio/wp-cron.php

 

 

Mensaje recibido en email, tras la ejecución de la Cron con PHP:

 

Content-type: text/html; charset=UTF-8

–> ESTÁ FUNCIONANDO OK
 

 

2.b – Cron con WGET

 

wget -O - -t 1 http://midominio/wp-cron.php

 

 

RESULTADO RECIBIDO POR CORREO:

 
cron job con wget
 

--2018-10-12 18:16:01--  http://midominio/test.php
Resolviendo midominio (midominio)... ***.***.***.***
Conectando con midominio (midominio)[***.***.***.***]:80... conectado.
Petición HTTP enviada, esperando respuesta... 200 OK
Longitud: 0 [text/html]
Grabando a: “test.php.1”
0K                                                        0,00 =0s
 
2018-10-12 18:16:02 (0,00 B/s) - “test.php.1” guardado [0/0]

 

En hosting compartido puede ocurrir que El límite de generación de datos es de 5 MB (stdin/stderr):

Grabando a: “STDOUT”
0K                                                        0,00 =0s
 
2018-10-03 21:59:03 (0,00 B/s) - escritos a stdout [0/0]

 

 

2.c – Cron con CURL

 
Creamos la tarea Cron:

curl http://midominio/wp-cron.php

 

cron job con curl
 

Resultado recibido por mail tras cron con curl:

 

% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 0 0 0 0 0 0 0 0

 
A diferencia del primer método (php), los trabajos cron basados en curl funcionarán solamente si las direcciones URL especificadas en las solicitudes curl son resueltas. Por ejemplo: si los registros DNS para el dominio son correctos y están en funcionamiento.
 

 

POSIBLES BLOQUEOS DE CRON EN CLOUDFARE CUANDO USAMOS CURL:

 
Desde Cloudfare podemos encontrar info al respecto de posibles bloqueos cuando ejecutamos CRON.

https://support.cloudflare.com/hc/es-es/articles/200169626

 

ejemplo:

curl http://midominio/wp-cron.php

 
Cloudfare parece bloquear en algunas ocasiones las peticiones con curl y wget hacia archivos php ..
Nos recomiendan crear un subdominio que no esté cacheado en Cloudfare, y desde él ejecutar las tareas Cron.
 

 

 

3. CONCLUSIONES

 

El resumen sería que es mejor ejecutar las CRON Jobs desde PHP, ya que así se evita una capa más en el proceso; al ejecutarlo desde PHP, se ejecuta directamente desde el servidor sin pasar por la capa web; es decir, si lo ejecutamos con wget o curl, primero se haría una petición hacia la capa web y después se ejecutaría el php.
 


En resúmen: PHP mejor y es la opción más simple. Curl y WGET acceden por HTTP y puede haber errores de bloqueos (entre ellos errores con CLOUDFARE).(más directo y menos posibilidad de errores y bloqueos con PHP).

 

Categorías Web