У меня есть приведенный ниже сценарий 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" user@ourdomain.com
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:00: файлы все еще присутствуют (могут быть добавлены новые файлы, может быть тот же файл). Электронное письмо отправлено с правильным выводом обеих функций, и теперь присутствует вход в систему, который произошел между 8-9.
Я установил auth.log на ротацию один раз в неделю, чтобы убедиться, что не было каких-либо проблем с ротацией / блокировкой файлов. Кроме того, если в 7 утра есть файлы, мы получаем правильный отчет.
Любые идеи? Мои навыки написания сценариев на bash в лучшем случае грубые, поэтому любые идеи приветствуются.
Вставьте echo $ BASH, чтобы увидеть, что произойдет, и вы можете обнаружить, что, если вы явно не указали, что корона использует bash, он использует sh, и я не уверен, что добавление [@] находится в FreeBSD sh.