Centos7のlogrotateサービス

HDDがいつの間にかいっぱいになっちゃったという原意の100%はログといっても過言ではありません。
なのでlogrotateサービスを設定しておく必要ありです。

# rpm -qa | grep logrotate
logrotate-3.8.6-15.el7.x86_64

ファイルは以下のようになっています。
– /etc/logrotate.conf ログローテーション全体の管理ファイル
– /etc/logrotate.d/* ログファイル個々の設定ファイル
– /var/lib/logrotate/logrotate/status 「最後にローテーションした日時」を管理するファイル

基本的な設定

/etc/logrotate.confのデフォルト。ローテートの間隔とかちょっとパラメータ変えるぐらいで、私の場合はほとんどの場合デフォルトで用が足ります。

weekly
rotate 4
create
dateext
#compress
include /etc/logrotate.d

/var/log/wtmp {
    monthly
    create 0664 root utmp
        minsize 1M
    rotate 1
}

/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}

各ログの設定

/etc/logrotate.d/*で各ローテートの設定をします。/etc/logrotate.d/httpdの場合は、

/var/log/httpd/*log {
    missingok
    notifempty
    sharedscripts
    delaycompress
    postrotate
        /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true
    endscript
}

こんな感じになっていて、/var/log/httpd/*logを自動的にローテートしてくれます。
*logとファイルだったら何でもローテートしてくれます。便利ですね。
独自のログに対してローテートを適用するときは、パーミッションだけ注意してください。

デバック

logrotate -f /etc/logrotate.conf

パーミションなどのエラーが出たら、正しいパーミションにする必要があります。あるいは、CentOS7からsuコマンドが利用できるので、userというユーザー権限でローテートする場合は、

/var/log/logtest/logtest.log
{ 
  copytruncate
  size 1
  rotate 5
  su user user ←これ追加
}

とやるとよいです。

ローテートされない

たいてい対象のサービスを再起動してないとか。


CentOS7のlogrotateでskipping … insecure permissionsとか言われてロテートしない
CentOS7.4 logrotateサービスを入れて日次でログを保存しよう

Last update: 2018.10.08 (月)