logrotate & bash で日付付のログをバックアップする。
今回の日付付ログファイルは、logrotateで取得するログをコピーする形で設定した。
ログは、
/var/log/httpd/www.domainname.com
の中に
www.domainname.com_access_log
の名前で保存されているものとする。
logrotateの設定
/etc/logrotate.conf – 大本の設定があるので確認すること
/etc/logrotate.d
の中に
www.domainname.com.log のファイルを作成、内容を記載していく
#vi www.domainname.com.log
/var/log/httpd/www.domainname.com/*log {
daily #日別ログ ほかに monthly weeklyなど
rotate 365 #一年分作成 指定した回数だけローテーションする ほかにsizeなど
noolddir #ローテーション対象のログと同じディレクトリにローテーションされたログを格納する。
#ディレクトリ指定は、olddir ディレクトリ名
ifempty #ログファイルが空でもローテーションする。逆は notifempty
missingok #ログファイルが存在しなくてもエラーを出さない 逆はnomissingok
sharedscripts #複数指定したログファイルに対してpostrotateまたはprerotateで記述されたコマンドを実行する。
postrotate #ログローテーション後に
/bin/kill -HUP cat /var/run/httpd.pid 2>/dev/null 2> /dev/null || true
endscript #ここまでのコマンド実行する。逆は、prerotate – endscript
}
#以降のコメント部分は実際には記載していません。
日別でログを取得したいとの要望だったので、rogrotateの設定では、毎日365日の保存の設定にしました。
次に、logrotateで切り離されたログをリネームして別途保存するシェルスクリプトを作成
daily_backup_log.sh
#!/bin/bash
d=date “+%e”
w=date “+%w”
y=date “+%Y”
m=date “+%m”
d=expr ${d} – 1
d=printf “%02d” ${d}
log_date=date -d ${y}${m}${d} +%Y%m%d
from_dir=/var/log/httpd
to_dir=/var/www/backup_log
cp ${from_dir}/www.domainname.com/www.domainname.com_access_log.1.gz ${to_dir}/www.domainname.com/www.domainname.com_access_log_${y}${m}${d}.gz
ちなみに、monthly_backup_log.sh の場合はこんな感じで
monthly_backup_log.sh
#!/bin/bash
d=date “+%d”
w=date “+%w”
y=date “+%C%y”
m=date “+%m”
if [ ${m} -eq 12 ]
then
m=01
else
m=”0″expr ${m#0} – 1
fi
from_dir=/var/log/httpd
to_dir=/var/www/backup_log
cp ${from_dir}/www.domainname.com/www.domainname.com_access_log.1.gz ${to_dir}/www.domainname.com/www.domainname.com_access_log_${y}${m}.gz
最後に、このシェルスクリプトを動かす、クーロンの設定
# 毎月1日の7時に動作
00 7 1 * * /var/www/backup_log/monthly_backup_log.sh
# 毎日7時に動作
00 7 * * * /var/www/backup_log/daily_backup_log.sh
以上で設定完了です。
cronの設定は、rogrotateのところで
postrotate
/bin/kill -HUP cat /var/run/httpd.pid 2>/dev/null 2> /dev/null || true
/var/www/backup_log/daily_backup_log.sh
endscript
としても問題ないと思います。
Category: Command / Tags:
Comments
No Comments
Leave a reply