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