zuntan02のはてなブログ

備忘録的なものです。時々職場の技術者ブログにも転記してますが、メインはこちらで。

【シェルスクリプト】手動で叩いたら動くのにcron経由で動かすと動かない場合の確認方法

以下の様にして、特定ログフォルダの中身を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コマンドでリージョンが指定できていなかったためのエラーと分かった。上記のは修正済みです。