s3の特定ディレクトリにファイルがあるか確認する

S3のバケットディレクトリにファイルが上がっているか、ファイルが空でないかを検知したい。 ので、検知する用のシェルスクリプトを書いた。 あまり綺麗な書き方ではないと思うのでもっといいやり方があれば知りたい。

ディレクトリの想定

特定バケット以下の指定ディレクトリのファイルを確認。 ディレクトリはこんな感じになっている想定。

nekootoko3_no_gohan/[matatabi | saba | catfood]/YYYYMMDDHH/ファイル

matatabi saba catfood ディレクトリ以下には毎時ファイルがアップロードされる。

スクリプト

現在時刻から3時間前に上げられているであろうファイルを確認するバッチ。

DATETIME=$(date -d '3 hours ago' '+%Y%m%d%H')
BUCKET_NAME='nekootoko3_no_gohan'
DIR_LIST="matatabi saba catfood"

ERR_MSG=''

for DIR_NAME in $DIR_LIST
do
    # 手動実行用に実行状況を出力
    echo "inspecting s3://$BUCKET_NAME/$DIR_NAME"

    RES=`/usr/local/bin/aws s3 ls s3://$BUCKET_NAME/$DIR_NAME --sum`
    if echo $RES | grep -sq 'Total Objects: 0'; then
        MSG="$DIR_NAME ni file ga naiyo!!\n"
        ERR_MSG=$ERR_MSG$MSG
    elif echo $RES | grep -sq 'Total Size: 0'; then
        MSG="$DIR_NAME no file size ga 0 dayo!!\n"
        ERR_MSG=$ERR_MSG$MSG
    fi
done

if [ -n "$ERR_MSG" ]; then
    echo -e $ERR_MSG >&2
fi

これをcron設定しよう。 標準エラー出力だけは出力するようにしないと、エラーメールが飛ばないので注意。

MAILTO=alert@alert.jp

5 * * * * /bin/sh どこかのディレクトリ/gohanchecker.sh 1> /dev/null