午前12時までにソースからファイルを受信できなかった場合に警告Eメールを送信するUNIXスクリプトは、受信したファイルが0バイトの場合に警告Eメールを送信します。

午前12時までにソースからファイルを受信できなかった場合に警告Eメールを送信するUNIXスクリプトは、受信したファイルが0バイトの場合に警告Eメールを送信します。

私は毎日受信するファイルの数とファイルサイズを確認する自動化されたプロセスを探しています。現在の場所に移動して確認し、手動でこれを実行しています。いつもすることで退屈なことです。誰でもここで私を案内できますか?私が実行したときに自分自身と他の人に電子メールを送信するサーバーのシェルスクリプトかもしれません。

また、最後にゼロバイトを受信した場合は、ファイル名を参照する必要があります。

私たちが毎日受け取る文書:

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

毎日手動で確認する必要がないように、1日に9つのファイルが受信されていることを確認し、そうでない場合は、ソースチームにこれらのファイルを送信するように指示する必要があります。

日付はどのように確認できますか?私たちのスクリプトは毎日/folder1/folder2/folder3/の下に日付(yyyymmdd)ディレクトリを作成し、ファイルは今日の日付ディレクトリに受信されます。例:パス:/folder1/folder2/folder3/ 20190918 20190919 -->日付ディレクトリは9月18日と19日です。

ファイル名は常に同じですか?同じですが、日付は異なりますか?全く違うんですか?ファイルパターンは常に変わりませんが、日付は毎日変更され、私が言及したパターン以外のファイルは受信されません。例:test_file1_20190919_20190918.txt.gz(ファイルは20190919フォルダとして受信されます)test_file1_20190918_20190917.txt.gz(ファイルは20190918フォルダとして受信されます)

9個ではなく10個のファイルを受け取ったらどうなりますか?それは問題ですか?予期しない名前のファイルが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"

おすすめ記事