作業ノート

様々なまとめ、雑感など

logrotateの設定メモ

仕事で小さなプログラを書くことになり、その出力ログを管理するために簡単なlogrotateの設定を行った。そのときのメモ。

cat <<'EOT' | sudo tee /etc/logrotate.d/foo > /dev/null
/path/to/log/foo.log {
    missingok
    monthly
    rotate 36
    compress
    ifempty
    create 0664 bar bar
    dateext
}
EOT

設定項目

各項目の役割について。

missingok

ローテーションするログがなくてもエラーにしない。

monthly

月1回、ローテーションする。/var/lib/logrotate.statusで管理している日付を基準にする。

$ cat /var/lib/logrotate.status
logrotate state -- version 2
...
"/path/to/log/foo.log" 2017-10-16
...

rotate 36

過去ログをいくつ管理するか。 monthlyの36なので、3年分(12*3)。

compress

過去ログをgzipで圧縮する。

ifempty

ローテーションするログが空ファイルであっても、ローテーションする。

create 0664 bar bar

対象ログのモード、所有者、所有グループ。

dateext

過去ログのファイル名を日付ベースにする。このオプションをつけると、過去ログのファイル名は

/path/to/log/foo.log-20171016

このようになる。

上記の設定の場合、compressがあるので

/path/to/log/foo.log-20171016.gz

このようになる。