En la ultima semana me di a la tarea de hostear una aplicación de envió de correos informativos para la organización en la que laboro y para esto requería correr un script Python de manera automática en intervalos diferentes.
Investigando un poco me encontré con la herramienta programación de tareas de Windows la probé y no me convenció, por ciertas razones:
- Se requiere crear un archivo .bat para correrlo automáticamente.
- Utilizar su interfaz confusa.
- Tenia que tener la computadora encendida de alguna manera.
Por estas razones opte por hostearlo en un servidor con la capa gratuita de amazon y a la vez confiar esto al buen Linux.
El primer paso a seguir es crearnos una cuenta en Amazon para esto ingrese en la siguiente liga aws.amazon.com/es/free
Una vez en este portal y creados nuestra cuenta gratuita por 1 año, debemos de ingresar los datos personales, así como también un método de pago en caso de 1 exceder el tiempo de prueba o 2 utilizar servicios que no estén cubiertos por la capa gratuita así que OJO estar de curiosos por aquí, que el cobro llega en dólares.
Los pasos son los siguientes:
- Una vez aprobada nuestra cuenta y confirmada por correo, pasaremos a crear una nueva instancia EC2.
- Una vez desplegado el menú de servicios, seleccionaremos la opción de EC2, bajo la rama de informática.
- Una vez ingresados al panel de EC2 lanzamos una nueva instancia, buscamos el siguiente boton.
- En este siguiente paso debemos seleccionar la versión de HVM que nos guste mas, en mi caso seleccione la primera opción, ya que cubre la capa gratuita y pienso que por ser de Amazon debe estar mas optimizado.
- El siguiente paso es seleccionar el tipo de instancia, por defecto seleccione la que cubre la capa gratuita.
Directamente damos clic en en la parte inferior derecha a revisar y lanzar, por ultimo extraemos la llave .pem que nos brinda la instancia para conectar vía SSH.
Si estas en Windows como yo, tendrás que descargar Putty para ingresar a nuestro servidor. este lo puedes conseguir desde su pagina oficial https://www.putty.org
Una vez descargado e instalado putty, notaremos que adicional al putty, tenemos puttyGen, este ultimo sirve para convertir el archivo .pem a .key y asi ingresarlo en nuestra configuración de putty.
Para crear la conexion a nuestro servidor realizaremos lo siguiente:
- Nos vamos al apartado de instancias en el nuestra consola EC2 y damos clic en instancias. en el menú lateral izquierdo.
- En este panel seleccionaremos nuestra instancia que ya debe de estar corriendo y le damos clic derecho y conectar.
- Ahora tendremos que navegar a la pestaña de Cliente SSH, para visualizar nuestros parametros de conexion.
- Abrimos putty y en el apartado de sesion ingresamos el DNS publico que nos indica el paso 4. La dirección será como la siguiente: ec2-*-**-**-**.us-east-2.compute.amazonaws.com
- Ahora dentro de putty navegaremos al apartado de conection/Data, en esta parte ingrese el usuario, esto lo podemos configurar en la pestaña de Conexion de instancia en AWS, por defecto es ec2-user.
- Por ultimo cargamos nuestra llave .key que convertimos anteriormente dentro de Connection/SSH/AUTH, cliqueamos browse en private key file for authentication.
Y le damos open, si todo salio bien, tendremos ya la consola de nuestro servidor.
Ahora solo falta clonar nuestro script de python y crear las ejecuciones automaticas, para este medio utilice Crontabs
Para crear un nuevo “Job”, utilice el comando Crontab -e, ingresamos a insert mode con la letra I, e ingresamos la tarea a ejecutar.
La siguiente imagen me ayudo a comprender como programar estas tareas.
Les explico rapidamente como utilizar crontabs, digamos que me gustaria ejecutar mi tarea de 6 AM a 5 PM al primer minuto todos los dias.
Se programaría de la siguiente manera:
En crontabs utilizamos asteriscos para referirnos a cada uno de los valores disponibles, si yo fuera a utilizar asterisco en el primer espacio, la tarea se ejecutaria a cada minuto de mi rango de horas.
Podemos utilizar comas para seleccionar valores, Ejemplo, si quisiera que mi script corriera al minuto 10 y al minuto 20, se ingresaria de la siguiete manera:
10,20 * * * * python3 /home/usuario/script.py
también podemos utilizar rangos, digamos que quiero correr mi script cada minuto los primeros 5 minutos de cada hora:
1-5 * * * * python3 /home/usuario/script.py
ahora utilizamos el slash para ejecutar repetidamente un script cada cierto tiempo, digamos que quiero ejecutar mi script cada 5 minutos:
*/5 * * * * python3 /home/usuario/script.py
Por ultimo y de los mas importantes, para ejecutar el script en punto de cada hora, ejemplo a las 12 en punto de la noche utilizamos 0.
0 0 * * * python3 /home/usuario/script.py
Para finalizar con este post, para ver nuestras tareas a ejecutar usamos el comando crontab -l , si en esta guía no te quedo muy claro el como usar crontab, les recomiendo el siguiente sitio para visualizar mejor esta explicación https://crontab.guru/
Originario de la N, Sonora, tierra de las carnitas asadas.
Programador PLC Siemens, Python – Aprendiendo a programar PHP, noob en linux
Excelete artículo mi buen dmov, Saludos desde Villagran