Apache ログのローテートしてS3に保管する メモ
# vi /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed 01 * * * * root run-parts /etc/cron.hourly 25 23 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly
# vi /etc/cron.daily/logrotate /var/log/httpd/*log { missingok notifempty daily rotate 30 sharedscripts postrotate /etc/init.d/httpd restart /home/ec2-user/bin/CopyTodayLog2S3.bash /var/log/httpd /home/ec2-user/bin/CopyTodayLog2S3.bash /var/log/httpd/timeless endscript }
sharedscripts は複数指定したログファイルに対してpostrotateまたはprerotateで記述されたコマンドを1回だけ実行する場合に指定する。逆はnosharedscripts
Web上には sharedscripts の説明を間違って書いてあるページが結構あるので注意↓↓
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/747logrotatecmd.html
http://memorva.jp/memo/linux/apache_logrotate.php
# vi /home/ec2-user/bin/CopyTodayLog2S3.bash #!/bin/bash AWS_ACCESS_KEY='AWS_ACCESS_KEY ' AWS_SECRET_KEY='AWS_SECRET_KEY ' BUCKET='hoge-bucket01.domain.info' BUCKET_FOLDER=`hostname` TODAY=`date +"%Y%m%d"` LOG_DIR=$1 if [ -z $LOG_DIR ] then echo "CopyTodayLog2S3.bash LOG_DIR [/var/log/httpd]" exit 1 fi if [ -d $LOG_DIR ] then s3put -a $AWS_ACCESS_KEY -s $AWS_SECRET_KEY -b $BUCKET \ -p $LOG_DIR -k /$BUCKET_FOLDER $LOG_DIR/*$TODAY else echo $LOG_DIR" Not found" fi