Scripts de sistemas en python
←
→
Transcripción del contenido de la página
Si su navegador no muestra la página correctamente, lea el contenido de la página a continuación
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