Scripts de sistemas en python

Página creada Felicia Ferrando
 
SEGUIR LEYENDO
Scripts de sistemas en python

Laboratorio de Administración y Gestión de Redes y Sistemas 2019-2020
Grado en Ingeniería Telemática
Escuela Técnica Superior de Ingeniería de Telecomunicación
Universidad Rey Juan Carlos

Cambios en el documento

12 de noviembre
En la práctica 2.1, donde decía escribe un script en python ahora dice escribe un
script en python 3.

Práctica 2.1. Acceso a un listado
El objetivo de esta práctica es que te familiarices con la librería subprocess para
acceder a la shell de Linux desde python.
Crea el directorio ~/lagrs/practica02
Escribe un script en python 3 con el nombre ~/lagrs/practica02/mi_ls.py.
Incluye un comentario en las primeras líneas tu nombre, apellidos y login.
Debe mostrar un listado con el nombre de los ficheros ordinarios del directorio
actual y su tamaño. Aunque hay funciones específicas de python para manejar
ficheros, usa subprocess.
  • Debe aparecer solamente el nombre del fichero, sin ningun path.
  • Ficheros ordinarios en sentido Unix. Esto es, deben excluirse los ficheros
    especiales: directorios, enlaces, pipes, sockets, dispositivos de caracter y
    dispositivos de bloque.
  • No debe mostrar los archivos ocultos.
  • La información debe aparecer en 2 columnas.

                                        1
• No incluyas ninguna cabecera con los nombres de los campos.
  • Sobra decir que es necesario que organices tu programa en funciones. Esto
    es algo que debes hacer siempre, también con programas cortos como este.

Práctica 2.2. Creación de un bot de telegram
  1. Instala Telegram en tu móvil, en tu tablet o en tu portátil.
  2. Crea un bot de telegram, con el nombre que quieras.
  3. Ponle una foto al perfil del bot.
  4. Escribe un programa con el nombre ~/lagrs/practica02/hola_telegram.py
     que envíe un mensaje de tipo hola mundo a tu cliente Telegram y luego
     entre en un bucle infinito atendiendo a los mensajes que reciba (de
     cualquier usuario). Por cada mensaje recibido, envía una respuesta
     cualquiera al cliente y muestra todo en la pantalla del servidor.
  5. Usa format para componer la respuesta. No uses la concatenación de
     cadenas con el operador +
  6. El token no estará en el fuente. El programa leerá el token desde el fichero
     token.txt, que estará en el directorio actual. (En este caso, el directorio
     ~/lagrs/practica02/, pero no escribas este trayecto, que el script lea el
     fichero desde el directorio actual)
  7. Si el fichero con el token no existe o no se puede leer, el programa mostrará
     un mensaje de error por stderr y morirá. O si lo prefieres, levantará una
     excepción que describa el problema.

Práctica 2.3. Shell desde telegram
Ahora programarás un bot de telegram que aceptará del usuario una orden de
shell, la ejecutará y responderá con el resultado de la ejecución. Escribe un
programa con el nombre ~/lagrs/practica02/telegram_shell.py, según la
siguiente especificación:
  • El token lo leerá de un fichero, como en el ejemplo anterior
  • El programa escuchará los mensajes que le envíe cualquier usuario, los
    enviará a la shell para ejecutarlos y devolverá al cliente el resultado.
  • El programa escribirá en stdout todo lo que sucede, los mensajes recibidos
    y las respuestas. Pero de forma razonablemente bien presentada para una
    persona. Esto es, no muestres estructuras de datos en bruto, sino campos

                                         2
formateados con un poco de cuidado. Observa que esto incluye presentar
      la fecha del mensaje en formato humano, no en segundos desde el epoch.
Al probar el bot, observa que el teclado virtual de tu móvil se pone en mayúsculas
automáticamente al principio del mensaje. Por ejemplo, si tecleas l y s escribiría
Ls, que no es una orden Unix correcta. La solución es forzar la minúscula en el
teclado virtual (pulsado shift antes de la l)

Práctica 2.4 Cron
En esta práctica probarás el uso básico de cron. Los puestos físicos del laboratorio
no tienen cron instalado, ya que son máquinas que no están siempre encendidas.
Haz el ejercicio en uno de los puestos virtuales del laboratorio.
Escribe brevemente las tablas de cron que usas, en el fichero ~/lagrs/practica02.txt
  1. Comprueba que cron funciona: Programa en el host una tarea que ejecute
     cada minuto touch sobre el fichero /tmp/test_cron_tulogin (donde tulo-
     gin es tu login en el laboratorio). Consulta la fecha de este fichero, si todo
     está en orden, borra esta entrada de la tabla de cron
  2. Escribe el script ~/lagrs/practica02/escribe_log en bash o python
     que añada la cadena probando cron, junto con la fecha y la hora, al fichero
     ~/lagrs/log.txt Como en cualquier log, debes añadir al final, sin borrar
     los mensajes precedentes.
      No le pongas extensión al script, ni .sh ni .py.
      Puedes usar el mandato de shell date
  3. Programa una tarea que ejecute el script anterior cada minuto. Cuando
     veas que funciona, modifica la entrada para que se ejecute a las 9 de la
     mañana, de lunes a viernes.

Práctica 2.5 Monitorización de directorios
El propósito de este ejercicio es programar un script que vigile una serie de
directorios, y nos envíe un mensaje de telegram si el número de ficheros que
contiene alguno de ellos excede cierto límite. También si tamaño de alguno de
los directorios excede cierto límite.
Escribe un programa con el nombre ~/lagrs/practica02/monitor.py, según
la siguiente especificación:
  • En las primeras líneas del script definirás las constantes DIRECTORIOS,
    MAX_TAMANIO, MAX_FICHEROS e ID_USUARIO

                                         3
Ejemplo:
  DIRECTORIOS = ["~/lagrs/test01", "~/lagrs/test02"]
  MAX_TAMANIO = 2   # Mb
  MAX_FICHEROS = 100
  ID_USUARIO = 123456789   # Escribe aquí tu id en telegram

  Puedes darle a estas constantes los valores que quieras. Te será más cómodo
  probar con valores menores que los del ejemplo.
• Cada vez que se ejecute el script, comprobará que, para cada uno de los
  DIRECTORIOS, el tamaño de la suma de su contenido sea menor o igual que
  MAX_TAMANIO (en Mb), y que el número de ficheros es menor o igual que
  MAX_FICHEROS. En otro caso, enviará un mensaje de telegram a ID_USUARIO
  describiendo todo lo que sucede (esto es, todos los incumplimientos que
  haya). Para detectar esto puedes usar las librerías que quieras, o bien
  subprocess o bien os, como prefieras. No importa que solo funcione en
  Unix.
• Observa que estos límites han de cumplirse para cada uno de los directorios
  por separado, no para el conjunto de todos los directorios, agregados.
• Naturalmente, cuando hablamos de los ficheros de un directorio nos referi-
  mos tanto los que estén directamente dentro del directorio como los que
  estén en sus subdirectorios, recorridos recursivamente.
• Puedes usar la orden de shell du -hs para conocer el tamaño de un
  directorio.
• En la constante DIRECTORIOS se podrá especificar el directorio home
  mediante la virgulilla, como en el ejemplo. Pero en principio python no la
  reconoce. Tendrás que reemplazar la virgulilla por el valor del home del
  usuario. Puedes averiguarlo con el método os.path.expanduser("~").
  Basta con que reconozca ~/, aunque como práctica optativa, puedes hacer
  que reconozca también ~jperez/
• Si ningún directorio supera sus límites, el script no enviará ningún mensaje
  por telegram. A menos que el script sea lanzado con la opción -f o
  --force-telegram. En este caso, se forzará el envío de un mensaje,
  describiendo el problema o comunicando que todo está en orden, según
  corresponda. En otras palabras:
     – El script siempre comunica los errores.
     – Si todo está bien y no se usa -f, no envía nada.
     – Si todo está bien y se usa -f, se envía un mensaje indicando que todo
       está bien.
  Para detectar esta opción, usa la librería optparse.

                                    4
• Haz que cron ejecute tu script sin argumentos cada media hora. (Aunque
    para tus pruebas hazlo cada minuto).
  • Haz que cron ejecute tu script con la opción -f todos los días, a la hora que
    te parezca bien. No importa que se solape esta ejecución con la ejecución
    ordinaria (sin -f)

Revisión de los nombres
Ejecuta el script ~mortuno/revisa practicas lagrs para comprobar que los
nombres de los ficheros son correctos.

                                       5
También puede leer