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.