logrotate

サーバ運用
07 /27 2009

サーバは、ホームページのアクセスやメール送受信などの際にログを作成してくれる。
ログは放っておくと肥大化するので、ローテートをする設定になっている。
ローテーションには、logrotate が使われている。
logrotate は、設定ファイル /etc/logrotate.conf を参照している。
rootで logrotate.conf に追記すれば、独自のログをローテートする事ができる。

rootでなくユーザ権限で
$ /usr/sbin/logrotate ~/my-logrotate.conf
を実行してみたが、
error: error creating state file /var/lib/logrotate.status: Permission denied
と怒られてしまった。
logrotate.status は所有者がrootになっているので、やはりroot権限が必要らしい。
(何かオプションを指定すれば良いのかもしれないが、分からなかった)
root権限でしか logrotate ができないのは不便な面もあるが、
ローテートするログファイルを一元管理できるというメリットもある。

さて、logrotate.conf の実際の書き方である。
既にこのファイルは存在し、何らかの設定が書いてあるはずなので、それを変える必要はない。
最下行に以下のように書いてあるので、
# system-specific logs may be also be configured here.
その下に、以下のように書けばよい。

/home/user1/procmail/rc.log /home/user2/procmail/rc.log /home/user3/procmail/rc.log {
        postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
        endscript
        sharedscripts
}
/home/user1/my-dir/pm2.log {
}

上の例で、rc.log は .procmailrc が生成するログファイルである。
ローテートをした後に HUP を送るような指定にしてある。
これは不要かもしれないが、他のサイトでこれを書いている所があったので、一応つけてみた。

また、pm2.log は、特定のメールを携帯に転送する自作プログラムのログである。
こちらはすべてデフォルトのままで良いので(たぶん)、内容が空となる。

Webminがある環境なら、logrotate.conf の記述を vi などのエディタで行う必要はない。

  1. Webminにrootでログイン。
  2. システム→Log File Rotation を選ぶ。
  3. Add a new log file to rotate. を実行する。
  4. Log file paths にログファイル名をフルパスで書く。(複数指定可能、各行に1つずつ書く)
  5. 必要であれば、Commands to run after rotation 欄に
    /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    と書き、Only run scripts once for all files? に「はい」を選ぶ。
  6. [保存]を押す。

以上の操作により、ログローテーションの記述が完了する。
上述の例は、Webminを使って生成した。

続きを読む

Paq

忘れっぽい中年プログラマが、日々の開発作業の中で、忘れると困ることを書き留めています。