Problem mit Bash-Skript unter FreeBSD

Problem mit Bash-Skript unter FreeBSD

Ich habe das folgende Bash-Skript so eingestellt, dass es jede Stunde per Cron als Root-Benutzer ausgeführt wird. Der Zweck dieses Skripts besteht darin, uns eine E-Mail zu senden, wenn Dateien auf unseren SFTP-Server hochgeladen wurden, und uns die Anmeldedaten zuzusenden. Hier ist das Skript

    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

Das Problem tritt jeden Tag um 8 Uhr morgens auf. Hier ist ein Beispiel dafür, was passiert

7 Uhr: Dateien sind vorhanden. Der Bericht wird mit der Ausgabe beider Funktionen korrekt gesendet.

8:00 Uhr: Dieselben Dateien sind vorhanden. Der Bericht wird nur mit der Ausgabe der Funktion build_report gesendet.

9 Uhr: Dieselben Dateien sind vorhanden. Der Bericht wird nur mit der Ausgabe der Funktion build_report gesendet.

10:00 Uhr: Dateien noch vorhanden (könnten neue Dateien sein, die hinzugefügt wurden, es könnte sich um dieselbe Datei handeln). Eine E-Mail mit der korrekten Ausgabe beider Funktionen wird gesendet und die Anmeldung, die zwischen 8 und 9 Uhr erfolgte, ist jetzt vorhanden.

Ich habe das auth.log so eingestellt, dass es einmal pro Woche rotiert, um sicherzustellen, dass es keine Probleme mit Dateirotation/Dateisperre gibt. Wenn um 7 Uhr morgens Dateien vorhanden sind, erhalten wir außerdem einen korrekten Bericht.

Irgendwelche Ideen? Meine Bash-Scripting-Fähigkeiten sind bestenfalls primitiv, also sind alle Ideen willkommen

Antwort1

Geben Sie ein echo $BASH ein, um zu sehen, was passiert. Sie werden möglicherweise feststellen, dass Crown sh verwendet, sofern Sie es nicht ausdrücklich anweisen, bash zu verwenden. Und ich bin nicht sicher, ob das Anhängen von [@] in FreeBSD sh möglich ist.

verwandte Informationen