Introducción:
Esta tarea consiste en
un script bash que monitorea una carpeta <directorio>,
esta es revisada cada <segundos>
segundos, y cuando
un cambio es detectado se envía un correo electronico reportando dicho
cambio. Este reporte se hace mediante correo electronico utilizando la
funcion openssl de bash y que permite hacer el envió del correo
utilizando un servidor smtp.
Ejecución:
Para correr el script
de debe ejecutar la sentencia:
$ ./mcd.sh <segundos> <directorio>
Luego, el
programa le pedirá la información
necesaria para su funcionamiento: servidor smtp a utilizar, puerto
donde éste escucha, cuenta email desde donde se enviará la alerta,
password en formato codificado base64 y cuenta email donde se enviará la
alerta.
Funcionamiento
del Script:
El script comprueba que se hayan ingresado la cantidad correcta
de argumentos, si no es así, se termina el proceso, en caso contrario,
prepara los archivos temporales y variables que se utilizarán en el
proceso.
Luego la funcion set_mail() lee los datos necesarios introducidos por
el usuario mediante el comando read y los guardan para despues ser
ajustadas al formato correcto para el funcionamiento del script (se
separa el usuario del @, etc).
Mediante el comando ls se guarda la información que contiene el
directorio y esta es guardada en un archivo, luego cada
segundos se repite el paso anterior pero la informacion es guardada en
otro archivo, y se comparan mediante el comando diff, si son diferenes
es porque se produjo un cambio dentro del directorio, y la salida de
este comando es guardada en otro archivo para ser reportada.
Ahora se necesita enviar el correo, para ello se creo la funcion
send_mail(), que formatea los datos obtenidos mediante set_mail() y
abre una conección con el servidor smtp mediante el comando openssl,
utilizando una pipa se le pasa la información necesaria desde una
función llamada mail() la cual responde automaticamente a cada petición
del servidor compensando los retardos de transmisión para cada petición
con un sleep.
Funcionalidad
extra:
Además se agregó la
opción para que al momento de pedir la password se
oculta lo que se escribe, de este modo se facilita el uso ya que el
usuario puede escribir su password sin necesidad de codificarla antes y
además nadie podra verla, para utilizar este modo de ejecución se debe
agregar un 1 como tercer agumento al momento de ejecutar.
Se incluyó tambien una función cabecera() que calcula en que momento
del dia se envía el email con el reporte, de este modo el correo
incluye un “buenos dias”, “buenas tardes” o “buenas noches” dependiendo
del caso, y produce un efecto mas acogedor para el receptor.