驴C贸mo Ejecutar De Forma Autom谩tica Tus Scripts En Python?

Fecha de publicaci贸n: 31 Mayo 2020
Tiempo de lectura: 4 min.
Premium: False
N煤mero de visitas: 370


El tema de automatizaci贸n es sin duda uno de mis temas favoritos en cuanto a programaci贸n se refiere. Buscar formas de reducir costos, tiempo, mano de obra y errores, con el fin de obtener resultados cada vez mejores, es sin duda el target de muchos desarrolladores, y a lo que todas las empresas aspiran para cada uno de sus procesos. 馃

Sin duda todos queremos hacer m谩s con menos recursos, sin embargo hay ocasiones en las cuales no nos percatamos y nos encontramos trabajando en tareas que f谩cilmente pueden automatizarse. Todas aquellas actividades que involucren una cierta cantidad de tiempo y sean repetitivas, en la gran mayor铆a de los casos son candidatas a una automatizaci贸n.

Automatizar tareas no solo implica realizar menos, en menos tiempo y con los mismos, o mejores resultados. Tambi茅n podemos hablar de automatizaci贸n cuando delegamos nuestra participaci贸n en una actividad, dejando que un tercero la realice por nosotros.

En programaci贸n existen diferentes formas de automatizar procesos, es por ello que, en esta ocasi贸n, me gustar铆a mostrarte una de ellas, el c贸mo poder ejecutar nuestros scripts de Python de forma peri贸dica y autom谩tica. 鈴

Para este post estar茅 trabajando con el sistema operativos Mac OS, sin embargo el tutorial funciona para cualquier sistema basados en unix (Ubuntu, Fedora, Red Hat etc ... ) Inclusive en Windows, claro, siempre y cuando poseas el bash de Ubuntu.

Bien, una vez dicha la introducci贸n, comencemos.

Ejecuci贸n peri贸dica.

Imaginemos el siguiente escenario.

Nos encontramos desarrollando un programa en Python el cual nos permite conocer el precio actual del d贸lar. No interesa que esta informaci贸n sea enviada a todos nuestros usuarios v铆a correo electr贸nico. El correo deber谩 enviarse todos los d铆as a las 9 de la ma帽ana. 馃懢

En primera instancia la tarea no suena algo complicada. Basta con consumir un API, crear un correo y por supuesto enviarlo a todos los usuarios. El hecho de ejecutar un script no debiese tomarnos m谩s de par de segundos

python main.py

Sin embargo si todos los d铆as, a las 9 am, debemos ingresar al servidor y ejecutar de forma manual el script, quiz谩s no sea nuestra mejor idea. Ya que, 驴Qu茅 pasa si por alguna raz贸n un d铆a no tenemos acceso a internet, nuestra computadora falla o simplemente nuestra alarma no son贸 y nos quedamos dormidos?

Que un usuario se encuentre involucrado en la ejecuci贸n manual de alg煤n proceso, abre la posibilidad a un gran cantidad de errores, recordemos, no somos perfectos y nos podemos equivocar. En este caso lo mejor que podemos haces es automatizar, de forma peri贸dica, la ejecuci贸n del script. Y para ello nos podemos apoyar de Cron.

CRON

Si nunca hab铆as escuchado hablar de Cron no te preocupes, aqu铆 te lo explicamos. Ver谩s, Cron no es m谩s que un demonio (un proceso que se ejecuta en segundo plano) que nos permitir谩 programar la ejecuci贸n de comandos mediante una fecha establecida.

Para comandos que necesitan ser ejecutados peri贸dicamente, por ejemplo: cada mes, cada semana, cada hora, cada minuto etc.. sin duda Cron ser谩 nuestra mejor opci贸n.

Siguiendo con nuestro ejemplo anterior, enviar el correo todos los d铆as (partiendo que ya tenemos nuestro programa Python funcionando) lo primero que debemos hacer ser谩 crear un archivo .sh. Dentro de este archivo colocaremos los comandos necesarios para poder ejecutar el programa.

#!/bin/bash

cd /Users/eduardo/Documents/curso
source env/bin/activate

python main.py

En este caso lo primero que hacemos es movernos al directorio donde se encuentra el proyecto, posteriormente activamos el entorno de desarrollo y finalmente ejecutamos el script. Bastante sencillo c贸mo podemos observar.

Una vez el archivo .sh hay sido creado, el siguiente paso ser谩 probarlo. Para ello debemos cambiar sus permisos.

chmod +x <filename>.sh

Ejecutamos

./<filename>.sh

Y si nuestro programa Python se ejecut贸 de forma exitosa, daremos por hecho que el archivo .sh funciona perfectamente, con lo cual ya podremos programar se ejecuci贸n peri贸dica. Para ello ser谩 necesario crear un nuevo archivo crontab. Dentro de este archivo colocaremos todas las introducci贸n que el demonio Cron ejecutar谩.

Dependiendo del sistema operativo este archivo debe encontrarse almacenado en diferentes directorios. Para no complicarnos nos apoyaremos el programa crontab.

crontab -e

Con la bandera -e crearemos y/o editaremos el archivo crontab.

Si queremos editar el archivo con el editor de texto nano, ya que por default ser谩 Vim, el siguiente comando te ser谩 de mucha utilidad. 馃槈

env EDITOR=nano crontab -e

Dentro del archivo colocaremos la fecha exacta de ejecuci贸n junto con el comando a ejecutar.

La estructura de crontab ser谩 la siguiente:

5 caracteres, separados por una coma, los cuales hacen referencia a un periodo de tiempo.

* * * * * comando a ejecutar.
- - - - -
| | | | |
| | | | ----- D铆a de la semana (0 - 7) (Domingo=0 or 7)
| | | ------- Mes del a帽o (1 - 12)
| | --------- D铆a del mes (1 - 31)
| ----------- Hora del d铆a (0 - 23)
------------- Minuto del d铆a (0 - 59)

Aqu铆 un par de ejemplos para que nos quede mucho m谩s en claro.

# Ejecutar script todos los d铆a primero de cada mes a las 9:15 pm.
15 21 1 * * /path/to/script.sh
# Ejecutar script cada 5 minutos, despu茅s de las 5pm los d铆as domingos
5 17 * * sun /path/to/script.sh

Para nuestro ejemplo la sentencia deber铆a quedar de la siguiente manera.

0 9 * * * /path/to/<filename>.sh

Ejecutamos nuestro script todos los d铆as a las 9am. No olvidemos colocar la ruta exacta de nuestro archivo .sh.

Guardamos y listo. Ya habremos dejado programada nuestra tarea, ahora solo falta esperar la hora exacta. 馃帀

馃憠馃徏 Nota: Siempre que trabajemos con Crontab ser谩 necesario verificar nuestra zona horaria, ya que a veces los servidores remotos no poseen el mismo horario que nuestra computadora local.

Para nosotros poder listar todos los comandos previamente programados, ejecutaremos la siguiente sentencia.

crontab -l

Si en dado caso queremos eliminar el archivo.

crontab -r

Sudo

Y ahora 驴Qu茅 pasa si nuestros script debe ejecutarse como super usuario? Pues bien, en esos casos s贸lo debemos trabajar con el archivo crontab como super usuario.

sudo crontab -e
sudo crontab -l
sudo crontab -e

Cadenas reservadas

Es importante mencionar que en unix existente ciertas cadenas de texto que hacen referencia a determinados periodos de tiempo. Por supuesto estas cadenas podemos utilizarlas en nuestro archivo crontab.

  • @reboot: Una vez inicie el equipo.
  • @yearly: El primer minuto del a帽o. Equivalente: 0 0 1 1 *
  • @monthly: El primer d铆a de cada mes. Equivalente : 0 0 1 * *
  • @weekly: El primer minuto de la semana. Equivalente : 0 0 * * 0
  • @daily: El primer minuto de todos los d铆as: Equivalente 0 0 * * *
  • @hourly: El primer minuto de cada hora. Equivalente : 0 * * * *

Conclusi贸n

Listo, de esta forma tan sencilla, delegando al ejecuci贸n de nuestro script, seremos capaces de automatizar procesos. Sin duda Cron junto con crontab nos ser谩n de mucha ayuda.

Lo interesante de todos esto, creo yo, es la gran flexibilidad con la cual podemos establecer fechas muy puntuales. Podemos utilizar meses, d铆as de la semana, horas e inclusive minutos, pudiendo as铆 sacarle el m谩ximo provecho posible 馃嵒

Programar el respaldo autom谩tico de una base de datos, calcular balances, env铆o de correos y cualquier tarea repetitiva f谩cilmente pueden ser programadas.

M谩s Tips y Ejercicios 馃悕

Adquiere una subscripci贸n PyWombat por tan solo $2 USD. al mes.

Conoce los beneficios de ser usuario premium:
Niveles desbloqueados: Ten accesos a todos los niveles de ejercicios. 馃敁
Nuevo l铆mite: Incrementa tu l铆mite de ejercicios por semana. 馃殌
Contenido 煤nico: Recibe semanalmente recursos exclusivos de Python (Videos, Art铆culos y Capitulos del libro PyWombat, comienza como desarrollador Python. 馃悕

Comentarios

Para poder conocer tu opini贸n es necesario ser un usuario autenticado. Login