また、一つのファイルに多くのログがたまらないように、ある期間でログファイルを切り替えるようにしています。具体的には、定期ジョブ実行のデーモン「crond」によって、次のシェルスクリプト(cron.daily/logrotate)が1日1回実行され、最後の行に記述された「logrotate」コマンドでログファイルを切り替えています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#!/bin/sh # Clean non existent log file entries from status file cd /var/lib/logrotate test -e status || touch status head -1 status > status.clean sed 's/"//g' status | while read logfile date do [ -e "$logfile" ] && echo "\"$logfile\" $date" done >> status.clean mv status.clean status test -x /usr/sbin/logrotate || exit 0 /usr/sbin/logrotate /etc/logrotate.conf |
logrotateコマンドの引数に指定している「/etc/logrotate.conf」が、logrotateコマンドの設定です。この/etc/logrotate.confファイルの19行目に、
1 |
include /etc/logrotate.d |
があり、ログの切り替え設定は「/etc/logrotate.d」ディレクトリの下にあるファイルに書き込まれています。
前述したようにログインのログはrsyslogdで取得しています。rsyslogdに関する、logrotateコマンドの設定は「/etc/logrotate.d/rsyslog」ファイルに書き込まれています。そして、認証やセキュリティに関するログファイルの/var/log/auth.logに関する設定は、次のように書かれています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
(略) /var/log/auth.log (略) { rotate 4 weekly missingok notifempty compress delaycompress sharedscripts postrotate /usr/lib/rsyslog/rsyslog-rotate endscript } |
「rotate 4」でログを別々のファイルで4世代保存し、「weekly」で週1回切り替えて、「compress」で圧縮するように設定されています。
ログが複数のファイルに分かれていたり、圧縮されていたりするとシェルスクリプトから処理するのが大変です。よって、シェルスクリプト用にログを別ファイルに保存して切り替えられないようにします。