如果我们在上午 12 点之前没有从源接收到文件,则发送警报邮件的 UNIX 脚本;如果收到的文件为零字节,则发送警报邮件

如果我们在上午 12 点之前没有从源接收到文件,则发送警报邮件的 UNIX 脚本;如果收到的文件为零字节,则发送警报邮件

我正在寻找一种自动化流程来检查我们每天收到的文件数量以及文件大小。目前,我正在通过前往该位置并检查它来手动完成此操作。这是一项乏味的工作,因为我时常这样做。有人可以从这里指导我吗?它可能是服务器中的一个 shell 脚本,当我运行时,它会向我自己和其他人发送一封电子邮件。

如果它在我们最后收到零字节,它还应该提及文件名。

我们每天收到的文件:

test_file1_20190919_20190918.txt.gz
test_file2_20190919_20190918.txt.gz
test_file3_20190919_20190918.txt.gz
test_file4_20190919_20190918.txt.gz
test_file5_20190919_20190918.txt.gz
test_file_20190919_20190918.mfst
sample_abc1_20190919_20190918.txt.gz
sample_abc2_20190919_20190918.txt.gz
sample_abc_20190919_20190918.mfst

我只是想确认我们每天收到 9 个文件,这样我就不需要每天手动检查,如果没有我需要通知源团队发送这些文件。

我们如何查看日期?我们的脚本将每天在 /folder1/folder2/folder3/ 下创建日期 (yyyymmdd) 目录,并且文件将在今天的日期目录中收到。 EX: 路径: /folder1/folder2/folder3/ 20190918 20190919 --> 日期目录为 9 月 18 日和 19 日

文件名总是相同吗?它们会相同但日期不同吗?它们可以完全不同吗?文件模式将始终保持不变,但其日期每天都会改变,我们不会收到我提到的模式以外的文件。例如: test_file1_20190919_20190918.txt.gz (文件将在 20190919 文件夹中接收) test_file1_20190918_20190917.txt.gz (文件将在 20190918 文件夹中接收)

如果您收到 10 个文件而不是 9 个怎么办?那是问题吗?如果文件有 9 个但名称意外怎么办,这是一个问题吗?是的,这会是个问题。

地点:/folder1/folder2/folder3/

任何帮助,将不胜感激:)

答案1

类似于...作为 cronjob 运行?

#!/bin/bash
address="[email protected]"
basepath=/folder1/folder2/folder3
err=0
expected=9
msg=''
subject='Filecheck'
today=$(date +%Y%m%d)

null_files="$(find ${basepath}/${today} -type f -size 0)"
null_files="$(printf '    %s\n' $null_files )"

count=-1  # '.' counts.  One-off-error :-)
# if there are restricions on the filenames,
# replace this with an appropriate find-command
# and iterate over that instead...
for item in ${basepath}/${today}/* ; do
  ((count++))
done

[[ $count -eq $expected ]] && msg='[ OK ] Count of files as expected\n\n'
[[ $count -gt $expected ]] && \
  msg="[ERROR] Count of files too BIG: ${count}\n\n" ; err=1
[[ $count -lt $expected ]] && \
  msg="[ERROR] Count of files too SMALL: ${count}\n\n" ; err=1

if [[ -n "$null_files" ]]; then
  msg+='[ERROR] Found empty files:\n'
  msg+="$null_files"
  err=1
else
  msg+='[ OK ] No files with with 0 bytes found.'
fi

# echo -e "$msg"

[[ $err -ne 0 ]] && subject="[ERROR] $subject" || subject="[OK] $subject"
sendEmail -t "$address" -u "$subject" -m "$msg"

答案2

尝试使用下面的脚本,效果也很好

请在 12 点后运行脚本

#!/bin/bash
d=`date +%Y-%m-%d -d "1 days ago"`
#echo $d
echo "Below are list of files present"
find  . -maxdepth 1 -type f -iname "*.txt" -newermt $d| sed "s/\.\///g"

count=`find  . -maxdepth 1 -type f -iname "*.txt" -newermt $d| sed "s/\.\///g"| wc -l`
if [ $count -eq 9 ]
then
echo "Total Number of file exsists in present directory is $count"
zero_sizefile=`find  . -maxdepth 1 -type f -iname "*.txt" -newermt $d -size 0| wc -l`
if [ $zero_sizefile > 0 ]
then
echo "Below are zero sized files"
find  . -type f -iname "*.txt" -newermt $d -size 0
else
echo "No files are zero sized files"
fi
else
echo "All files doesnt exists"
fi

相关内容