Tengo el siguiente script bash configurado para ejecutarse cada hora a través de cron como usuario root. El propósito de este script es enviarnos un correo electrónico cuando los archivos se hayan cargado en nuestro servidor SFTP y enviarnos los inicios de sesión. Aquí está el guión
build_report() {
# This function builds the report header and gets the list of files
#Get all the files under /home/SFTP
local f=($( find "/home/SFTP" -type f | tr " " "_" ))
echo
echo "********************************************";
echo "*************** FILE REPORT ****************";
echo "********************************************";
echo "**** SEARCHING THROUGH SFTP FOLDERS ******";
echo "********************************************";
echo "* IF I FIND SOMETHING, I WILL LIST IT HERE *";
echo "********************************************";
echo "********************************************";
echo "GENERATED ON $TIMESTAMP ";
echo
echo
#Loop through all the files and list list them
for i in " ${f[@]}"
do
echo $i
done
}
sftp_log() {
#This function checks the /var/log/auth.log file for sessions
echo "*****************Begin Access Log*********************"
cat /var/log/auth.log|grep -E "interactive/pam"
}
TIMESTAMP=$(date)
files=$(find "/home/SFTP" -type f | tr " " "_")
#If there are files present create the report, email it and log we found something.
#Else, log we didn't find anything
if [ "$files" != "" ]; then
{ build_report && sftp_log; } | awk '{print $0,"\n"}' | mail -s "report" [email protected]
echo $TIMESTAMP " Files found. Email Sent">>filereport.log
else
echo $TIMESTAMP " No files found" >>filereport.log
fi
exit 0
El problema llega todos los días a las 8 a.m. Aquí un ejemplo de lo que sucede
7 a.m.: Los archivos están presentes. El informe se envía correctamente con la salida de ambas funciones.
8 a.m.: Los mismos archivos están presentes. El informe se envía solo con el resultado de la función build_report
9 a.m.: Los mismos archivos están presentes. El informe se envía solo con el resultado de la función build_report
10 a.m.: los archivos aún están presentes (podrían ser archivos nuevos agregados, podría ser el mismo archivo). Se envía un correo electrónico con la salida de ambas funciones correctamente y el inicio de sesión que ocurrió entre 8-9 ahora está presente.
Configuré auth.log para que rotara una vez a la semana para asegurarme de que no hubiera algún tipo de problema de rotación/bloqueo de archivos. Además, si hay archivos presentes a las 7 a. m., obtenemos un informe correcto en ese momento.
¿Algunas ideas? Mi capacidad de scripting en bash es, en el mejor de los casos, tosca, por lo que cualquier idea es bienvenida.
Respuesta1
Ponga un echo $BASH para ver qué sucede, es posible que, a menos que le diga explícitamente a Crown que use bash, esté usando sh, y no estoy seguro de que agregar [@] esté en FreeBSD sh.