Linux/定期ログ圧縮
提供: 初心者エンジニアの簡易メモ
目次
設定ファイルのディレクトリ
ls /etc/logrotate.d/
ローテート作成
vi /etc/logrotate.d/sample
/var/www/sample/logs/access_log /var/www/sample/logs/error_log {
daily
rotate 4
missingok
}
- この例だと、日ごとにバックアップし、4世代保持する
- missingokはログがないときでもエラーとしない
ローテートされてるか確認
/usr/sbin/logrotate -d /etc/logrotate.d/sample
前回ローテート履歴
vi /var/lib/logrotate.status
正規表現でパス記述
/var/www/sample/logs/*_log {
ログバックアップ後に圧縮コマンドをうつ
vi /etc/logrotate.d/sample
/var/www/sample/logs/access_log /var/www/sample/logs/error_log {
daily
rotate 4
missingok
sharedscripts
postrotate
ls *.log-* | grep -v gz | xargs gzip
endscript
}
ログバックアップ後にコマンドをうつ
vi /etc/logrotate.d/sample
/var/www/sample/logs/access_log /var/www/sample/logs/error_log {
daily
rotate 4
missingok
sharedscripts
postrotate
sh /var/www/sample/bin/test.sh
endscript
}
複数コマンドを打ちたい場合
vi /etc/logrotate.d/sample
/var/www/sample/logs/access_log /var/www/sample/logs/error_log {
daily
rotate 4
missingok
sharedscripts
postrotate
sh /var/www/sample/bin/test.sh
sh /var/www/sample/bin/test.sh
endscript
}
例:apacheのlogrotate設定はこんな感じ
$ vi /etc/logrotate.d/httpd
/var/log/httpd/*log {
daily
rotate 30
missingok
notifempty
sharedscripts
delaycompress
postrotate
/sbin/service httpd reload > /dev/null 2>/dev/null || true
endscript
}
日付でリネーム
/var/log/httpd/*log {
daily
rotate 30
missingok
notifempty
sharedscripts
delaycompress
dateext # 日付形式でリネーム(例: access_log-20250715)
dateformat -%Y%m%d # 日付フォーマット指定(オプション)
postrotate
/bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true
endscript
}
