Проблема со скриптом Bash на FreeBSD

Проблема со скриптом Bash на FreeBSD

У меня есть следующий скрипт bash, который запускается каждый час через cron как пользователь root. Цель этого скрипта — отправлять нам по электронной почте, когда файлы загружены на наш сервер sftp, и отправлять нам логины. Вот скрипт

    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

Проблема возникает в 8 утра каждый день. Вот пример того, что происходит

7 утра: Файлы присутствуют. Отчет отправляется корректно с выводом обеих функций.

8 утра: Те же файлы присутствуют. Отчет отправляется только с выводом функции build_report

9 утра: Те же файлы присутствуют. Отчет отправляется только с выводом функции build_report

10 утра: Файлы все еще присутствуют (могут быть добавлены новые файлы, а могут быть и тем же файлом). Электронное письмо отправляется с правильным выводом обеих функций, и вход в систему, который произошел между 8 и 9, теперь присутствует.

Я установил auth.log на ротацию раз в неделю, чтобы убедиться, что не было какой-то проблемы ротации/блокировки файлов. Кроме того, если в 7 утра есть файлы, мы получаем правильный отчет.

Есть идеи? Мои навыки написания скриптов на bash в лучшем случае сырые, так что любые идеи приветствуются

решение1

Введите echo $BASH, чтобы посмотреть, что произойдет. Вы можете обнаружить, что если вы явно не указываете Crown использовать bash, то он использует sh, а я не уверен, что добавление [@] реализовано в FreeBSD sh.

Связанный контент