Valora este artículo :
Este artículo le ha sido útil ?
Sí
No
Vous avez noté 0 étoile(s)
Sommaire
Procédure
El objetivo de una tarea cron es ejecutar automáticamente un script, un comando o un programa a horas determinadas.
Con"LWS cron job", puede programar un script en su sitio para que se ejecute en diferentes momentos. Por ejemplo, una vez a la semana, una vez al día, el día 8 de cada mes, etc.
Cron es una herramienta muy útil para que los administradores de sistemas automaticen diversas tareas, como la copia de seguridad de datos, la actualización de software, elenvío de correos electrónicos, etc.
A estas tareas se les aplica un tiempo de espera de 240s, lo que significa que si tu script tarda más de 4 minutos en ejecutarse, se cerrará automáticamente pasados 4 minutos.
En primer lugar, debe conectarse a su cuenta LWS y acceder al alojamiento compartido para el que desea crear una tarea cron.
Una vez en la gestión de tu servicio, busca el bloque"Base de datos y PHP" y haz clic en"Tareas cron".
Lo primero que debe configurar para su tarea cron es su periodicidad.
A este nivel, LWS ofrece preajustes en su herramienta para que puedas configurarlo en 1 clic.
Para ello, basta con utilizar la primera lista de la parte superior del formulario y seleccionar uno de los parámetros propuestos. Esto rellenará automáticamente los campos para que coincidan con la periodicidad indicada en la lista que haya seleccionado.
Si la periodicidad que desea establecer no está propuesta en esta primera lista, no se preocupe, podemos configurar cada elemento.
Para cada elemento (minutos, horas, días, etc.), puede introducir los valores manualmente o utilizar el campo de lista situado a la derecha de cada campo.
Así, por ejemplo, si quiero que mi tarea comience todos los días a las 12:27, todo lo que tengo que hacer es seleccionar el número 27 en la lista adjunta al campo de minutos y seleccionar 12:00 pm (mediodía) en la lista adjunta al campo de horas.
Existen tres formas de llamar a su script a través de la herramienta Cron Task:
La diferencia entre estas tres opciones radica principalmente en la forma en que ejecutan su script.
Una llamada Wget o Curl utiliza el protocolo HTTP, lo que significa que estará sujeta a las configuraciones y restricciones de Apache, como el tiempo de espera, que puede ser relativamente corto.
Lallamada PHP, por otro lado, estará libre de las limitaciones que discutimos con los otros dos métodos. Piense en la llamada PHP como si fuera a través de una conexión SSH.
Por lo tanto, podría preguntarse qué método elegir para configurar su tarea Cron. Nuestra respuesta es que no hay diferencias reales para scripts básicos que se ejecutan rápidamente. Sin embargo, si su tarea CRON es bastante grande, con muchas acciones realizadas y por lo tanto un tiempo de ejecución un poco más largo, el método más adecuado será unallamada PHP. A diferencia de Curl o Wget, el tiempo de espera será mayor (4 min).
Vamos a ver cómo configurar una tarea cron para cada una de las llamadas mencionadas anteriormente. Tomaremos como ejemplo un sitio sencillo que llama a un script raíz.
Llamada cURL
Al hacer una llamada curl utilizando el protocolo HTTP, simplemente llamamos a la URL de nuestro archivo de la siguiente manera
curl -s -H "Cache-Control: no-cache" "https://www.mon-domaine.fr/cron.php" > /dev/null
También podemos necesitar enviar parámetros a nuestro script. Para ello, basta con añadirlos de la siguiente manera:
curl -d "param1=valor1¶m2=valor2" -s -H "Cache-Control: no-cache" "https://www.mon-domaine.fr/cron.php" > /dev/null
Esto nos permitirá recuperar los valores de estos parámetros en el código de nuestro script POST.
Opción | Función |
---|---|
-s |
Modo silencioso (sin barra de progreso). |
-H "Cache-Control: no-cache" |
Forzar no-cache en el servidor. |
> /dev/null |
Redirige la salida para no guardar nada. |
Llamada a Wget
Durante una llamada Wget, que también utiliza el protocolo HTTP, al igual que con la llamada cURL, también llamaremos a la URL de nuestro script. Esto dará :
wget --no-cache --output-document=/dev/null --header="Cache-Control: no-cache" "https://www.mon-domaine.fr/cron.php"
Si necesitamos pasar parámetros al script, con Wget no tendremos más remedio que pasar los parámetros en GET. He aquí cómo escribir el comando :
wget --no-cache --output-document=/dev/null --header="Cache-Control: no-cache" "https://www.mon-domaine.fr/cron.php?param1=value1¶m2=value2"
En el script, podemos recuperar estos dos parámetros en GET.
Opción | Función |
---|---|
--no-cache |
Evita el uso de cachés intermedias (útil con ciertos proxies). |
--output-document=/dev/null |
No almacena nada localmente. |
--header="Cache-Control: no-cache" |
Envía una cabecera HTTP para evitar el almacenamiento en caché del lado del servidor. |
Llamada PHP
En el caso de un sitio sencillo, imaginemos que el archivo que contiene mi script se llama cron.php
Basta con introducir el siguiente comando en la herramienta Cron Task:
php /htdocs/cron.php
Aquí, la versión de PHP utilizada para ejecutar su script será la 8.0 por defecto.
Si desea utilizar una versión específica de PHP, simplemente modifique ligeramente la llamada. Por ejemplo, si desea utilizar la versión 7.2 para ejecutar el script, este es el comando llamado :
php72 /htdocs/cron.php
También podemos necesitar pasar un argumento que luego será utilizado en nuestro script.
Por ejemplo, imaginemos que el objetivo de nuestro script es enviar un correo electrónico en función de un criterio que definamos, como el cumpleaños. Por lo tanto, podríamos querer pasar este criterio en la llamada. He aquí cómo hacerlo a través de la línea de comandos :
php72 /htdocs/cron.php type=aniversario
Casos particulares
También existen casos especiales en función de lo que utilice para su sitio.
Por ejemplo, en el caso de un sitio creado con el framework Cakephp, la configuración de la tarea CRON será un poco diferente porque se hará a través de un comando SHELL llamado por el sistema del framework.
Imaginemos que tenemos un sitio de comercio electrónico creado con el framework Cakephp y que queremos configurar un script que envíe un email al mejor cliente para ofrecerle un código promocional.
Vamos a crear un comando Cake que llamaremos SendCP, que contendrá el script que gestiona lo que queremos hacer. Así es como configuraremos la tarea Cron :
php72 /htdocs/Consola/cake.php SendCP
Llevaría mucho tiempo dar un ejemplo de cada caso, pero con lo que se ha dado aquí, ya tienes una buena base para utilizar la herramienta de tareas Cron.
Utilizando los distintos ejemplos, ahora sabemos cómo escribir nuestro comando para :
Ahora vamos a ver cómo crear un archivo de registro para que podamos ver lo que sucedió durante el script llamado por Cron.
Para ello, utilizaremos el siguiente ejemplo para nuestro script CRON.
Ejemplo de una función PHP echo para el archivo de registro
<?php /* Para que no tengas que preocuparte por la caché */ header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); /* Escriba la fecha actual en el fichero, por ejemplo: 2023/01/19 12:24:01 */ /* PHP_EOL permite omitir una línea en el fichero */ echo date('Y/m/d h:i:s').PHP_EOL; /* Escriba la siguiente frase en el archivo de registro */ echo 'Grabando mi Cron'.PHP_EOL.PHP_EOL; ?>
Representación del archivo de registro después de lanzar el script a través de Cron Job
2023/01/19 02:57:01 Grabando mi Cron 2023/01/19 03:57:01 Grabando mi Cron 2023/01/19 04:57:01 Grabando mi Cron 2023/01/19 05:57:01 Grabando mi Cron 2023/01/19 06:57:01 Grabando mi Cron 2023/01/19 07:57:01 Grabando mi Cron 2023/01/19 08:57:01 Grabando mi Cron
Por lo tanto, lo que pongas en tu archivo de registro dependerá de ti y de lo que quieras controlar en tu script. Por ejemplo, podría ser una lista de acciones con el resultado de cada una.
Ejemplo de una llamada cURL con retorno en un archivo de registro
Para una llamada cURL, este es el comando a introducir en el campo "Comando":
curl -s -H "Cache-Control: no-cache" "https://www.mon-domaine.fr/cron.php" > /htdocs/logs/cron_curl.log 2>&1
En este ejemplo, se realizarán writebacks (echo PHP) en el archivo cron_curl.log de la carpeta logs. Si el archivo o carpeta no existe, se creará automáticamente.
Opción | Función |
---|---|
-s |
Modo silencioso (sin barra de progreso). |
-H "Cache-Control: no-cache" |
Forzar no-cache en el servidor. |
> /htdocs/logs/cron_curl.log |
redirige la salida estándar (stdout) a cron_curl.log. |
2>&1 | también redirige los errores (stderr) al mismo archivo. |
Ejemplo de llamada a wget con retorno a un archivo de registro
Para una llamada a Wget, éste es el comando a utilizar:
wget -O - -q --no-cache --header="Cache-Control: no-cache" "https://www.mon-domaine.fr/cron.php" > /htdocs/logs/cron_wget.log 2>&1
En este ejemplo, la respuesta de escritura (echo PHP) se enviará al archivo cron_wget.log de la carpeta logs. Si el archivo o carpeta no existe, se creará automáticamente.
Opción | Función |
---|---|
--no-cache |
Evita el uso de cachés intermedias (útil con algunos proxies). |
--header="Cache-Control: no-cache" |
Envía una cabecera HTTP para evitar el almacenamiento en caché del lado del servidor. |
--post-data="..." | añade una cabecera HTTP personalizada. |
> /htdocs/logs/cron_wget.log |
redirige la salida estándar (stdout) a cron_wget.log. |
2>&1 | también redirige los errores (stderr) al mismo archivo. |
Ejemplo de una llamada PHP con retorno a un archivo de registro
Para una llamada PHO, este es el comando a utilizar:
php72 /htdocs/cron.php >> /htdocs/logs/cron_php.log
En este ejemplo, la retroalimentación de escritura (echo PHP) será enviada al archivo cron_php.log en la carpeta logs. Si el archivo o la carpeta no existen, se crearán automáticamente.
Una vez que haya creado sus tareas cron, puede encontrarlas directamente en el listado que aparece debajo del formulario de adición.
Aquí encontrará una lista con el comando registrado, la periodicidad y la opción de eliminar una tarea cron o pausarla.
Si tienes un paquete LWS Starter o superior, puedes modificar el cron job de tu paquete a través del Web Terminal accesible desde la administración de tu paquete.
Para ello, conéctese a su alojamiento y acceda al alojamiento compartido cuyo cron desea modificar.
Haga clic en"Terminal" en la sección "Software".
Acceda al archivo cron mediante el siguiente comando
crontab -e
Una vez en el archivo cron, busque en el archivo la tarea que desea modificar. Cada línea del archivo representa una tarea independiente. A continuación, modifique la tarea cron, asegurándose de que la sintaxis sigue siendo correcta. A continuación, guárdela mediante la combinación de teclas [CTRL] +X y luego"Y". A continuación, pulse [Intro].
A continuación, puede comprobar si la tarea cron se ha modificado correctamente mediante el siguiente comando:
crontab -l
Has enlazado tu dominio con CloudFlare usando las DNS de este último y quieres configurar una tarea cron desde tu área de cliente en la sección asociada, pero la tarea sólo se ejecuta una vez sin repetirse en el intervalo de tiempo que querías. Este problema es conocido, CloudFlare bloquea la ejecución de crons enviados desde nuestros servicios. Para superar este problema, he aquí una solución.
Las tareas cron configuradas desde el área de clientes no funcionan si utiliza CloudFlare DNS. Para solucionar este problema, siga este procedimiento:
En la sección "DNS", añada un registro CNAME como se muestra en el siguiente ejemplo:
Sustituye"cron" por el nombre de tu subdominio y"dominio.ext" por el nombre de tu dominio.
Asegúrese de que la nube es de color gris y no naranja. Esto indica a CloudFlare que no desea utilizar sus servicios para este subdominio.
A continuación, puede hacer clic en el botón"Añadir registro".
Ahora ya sabe cómo : - Entender el propósito y el funcionamiento de un trabajo cron 🤖
Esperamos que este artículo te haya proporcionado todas las claves para dominar las tareas cron y automatizar las tareas de tu sistema de forma eficiente.
Si tienes alguna pregunta, opinión o consejo que compartir, no dudes en dejarlo como comentario. ¡Gracias por leer y hasta pronto para más consejos prácticos! 🙏💬
Valora este artículo :
Este artículo le ha sido útil ?
Sí
No
0mn lectura
Multidominio - Poner varios dominios en el mismo servicio de alojamiento web
1mn lectura
¿Es posible eliminar la función antispam de RSpamD en el alojamiento compartido?
0mn lectura
¿Cómo puedo ver los correos electrónicos enviados mediante la función de correo PHP y bloqueados por SPAMASSASSIN?