Problema com script Bash no FreeBSD

Problema com script Bash no FreeBSD

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.

informação relacionada