FreeBSD의 Bash 스크립트 관련 문제

FreeBSD의 Bash 스크립트 관련 문제

아래 bash 스크립트는 루트 사용자로 cron을 통해 매시간 실행되도록 설정되어 있습니다. 이 스크립트의 목적은 파일이 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에 있는지 확실하지 않습니다.

관련 정보