Eu tenho o script bash abaixo configurado para ser executado a cada hora via cron como usuário root. O objetivo deste script é nos enviar um e-mail quando os arquivos forem carregados em nosso servidor SFTP e nos enviar os logins. Aqui está o roteiro
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
O problema surge às 8h todos os dias. Aqui está um exemplo do que acontece
7h: Os arquivos estão presentes. O relatório é enviado corretamente com a saída de ambas as funções.
8h: Os mesmos arquivos estão presentes. O relatório é enviado apenas com a saída da função build_report
9h: Os mesmos arquivos estão presentes. O relatório é enviado apenas com a saída da função build_report
10h: Arquivos ainda presentes (podem ser novos arquivos adicionados, podem ser o mesmo arquivo). Um e-mail é enviado com a saída de ambas as funções corretamente e o login que ocorreu entre 8 e 9 agora está presente.
Eu configurei o auth.log para girar uma vez por semana para garantir que não houvesse algum tipo de problema de rotação/bloqueio de arquivo. Além disso, se houver arquivos presentes às 7h, obteremos um relatório correto.
Alguma ideia? Minha capacidade de script bash é, na melhor das hipóteses, rudimentar, então qualquer ideia é bem-vinda
Responder1
Coloque um echo $BASH para ver o que acontece, você pode descobrir que, a menos que esteja dizendo explicitamente ao Crown para usar o bash, ele está usando sh, e não tenho certeza se o acréscimo [@] está no sh do FreeBSD.