以下の様にして、特定ログフォルダの中身をAWS S3に同期してから日付を指定して削除するシェルスクリプトを作ってみたとき、手動で実行したら問題なく動いたのに、cronで動作すると、発火はしている様なのに、失敗している。
スクリプト本体
vi /home/hoge/bin/move-logs-s3.sh
#!/bin/sh MYEIP=`curl -q http://169.254.169.254/latest/meta-data/public-ipv4` S3BUCKET="S3バケット名" OLDLOGDIR="対象ログDIR" # s3 sync aws s3 sync ${OLDLOGDIR} s3://${S3BUCKET}/${MYEIP}/logs --region ap-northeast-1 # tmpwatchで30日以上経過したファイルを削除 tmpwatch -m 720 ${OLDLOGDIR}
crontab
crontab -e
# move logs to S3 0 0 * * * /home/hoge/bin/move-logs-s3.sh > /dev/null 2>&1
cronのログを見るためには
MAILTO=メールアドレス 0 0 * * * /home/hoge/bin/move-logs-s3.sh
のようにして実行してみると、ログがメールで飛んでくる。
※今回はaws s3コマンドでリージョンが指定できていなかったためのエラーと分かった。上記のは修正済みです。