綾小路龍之介の素人思考

[weechat] ログファイルをlogrotateする。

流量の多いチャットルームのログを7日間だけ保存するようにする。weechatのloggerプラグインだと出来ないので、linuxで一般的に使われるlogrotateコマンドを使う。

まずはlogrotate.confファイルを編集し、以下の内容にする。トリッキーなのは、postrotateの部分。weechatはログファイルをopenした状態のままcloseしないが、fifoプラグインを使えば、weechatの外側からweechatにログを中断して再開する命令を出すことができる。このままだとweechatが複数立ち上がっている場合は全てのプロセス宛に同じ命令を出すことになるが、それは気にしない。

$ vi /*******/etc/logrotate.conf
$ cat /*******/etc/logrotate.conf
/*******/.weechat/logs/irc.freenode.#weechat.weechatlog {
        daily
        missingok
        rotate 100
        postrotate
                for fifo in ~/.weechat/weechat_fifo_*
                do
                        echo -e 'irc.freenode.#weechat */logger disable\nirc.freenode.#weechat */logger set 9' >$fifo
                done
        endscript
}

その後にlogrotate.statusを作っておく。

$ touch /*******/lib/logrotate.status

実行テストを行う。-d オプションはdebugモード。confファイルにミスがあったり、statusファイルが存在しないとこのとき注意される。

$ /usr/sbin/logrotate -d -s /*******/lib/logrotate.status /*******/etc/logrotate.conf
reading config file /*******/etc/logrotate.conf
reading config info for /*******/.weechat/logs/irc.freenode.#weechat.weechatlog

Handling 1 logs

rotating pattern: /*******/.weechat/logs/irc.freenode.#weechat.weechatlog  after 1 days (100 rotations)
empty log files are rotated, old logs are removed
considering log /*******/.weechat/logs/irc.freenode.#weechat.weechatlog
  log does not need rotating

実行すると、以下のようになる。これは成功した例。ただし、/*******/.weechat/logs/irc.freenode.#weechat.weechatlogがまだ1世代しかないので、ローテーションは行われていない。また、stateファイルを表示すると、ローテーションに成功したことがわかる。

$ /usr/sbin/logrotate -s /*******/lib/logrotate.status /*******/etc/logrotate.conf
$ ls -la irc.freenode.#weechat.weechatlog*
-rw-r--r-- 1 **** **** 1730652 2011-02-07 12:46 irc.freenode.#weechat.weechatlog
$ cat /*******/lib/logrotate.status
logrotate state -- version 2
"/*******/.weechat/logs/irc.freenode.#weechat.weechatlog" 2011-2-7

強制的にローテーションを行うにはlogrotate に -f オプションをつけて実行する。

$ /usr/sbin/logrotate -f -s /*******/lib/logrotate.status /*******/etc/logrotate.conf
$ ls -la irc.freenode.#weechat.weechatlog*
-rw-r--r-- 1 hoge hoge 1730652 2011-02-07 12:46 irc.freenode.#weechat.weechatlog.1
$ cat /*******/lib/logrotate.status
logrotate state -- version 2
"/*******/.weechat/logs/irc.freenode.#weechat.weechatlog" 2011-2-7

-fオプションをつけて再度 logrotate を走らせるとローテーションが行われ、通し番号の大きいファイルが作成されたことがわかる。

$ /usr/sbin/logrotate -f -s /*******/lib/logrotate.status /*******/etc/logrotate.conf
$ ls -la irc.freenode.#weechat.weechatlog*
-rw-r--r-- 1 hoge hoge    3688 2011-02-07 15:25 irc.freenode.#weechat.weechatlog.1
-rw-r--r-- 1 hoge hoge 1730652 2011-02-07 12:46 irc.freenode.#weechat.weechatlog.2
$ cat /*******/lib/logrotate.status
logrotate state -- version 2
"/*******/.weechat/logs/irc.freenode.#weechat.weechatlog" 2011-2-7

logroteteはデーモンではないので、実行するだけだとローテーションは1回しか行われない。これを定期的に実行するにはcronを使う。-f オプションをつければここで1時間に1回実行させることも可能のはず。

$ crontab -e
0 0 * * * /usr/sbin/logrotate -s /*******/lib/logrotate.status /*******/etc/logrotate.conf

リファレンス

  1. WeeChat User’s Guide
  2. logrotate(8) - Linux man page
  3. logrotateをユーザー権限で実行する – ぱんぴーまっしぐら
  4. ログファイルローテートの仕組みと扱い方 | CCCeK インフラ本舗
  5. @IT:logrotateのテストを行うには
  6. logrotate によるログのローテーション
  7. logrotate ユーザ - Google 検索
  8. logrotate manpage - Google 検索
  9. logrotate cron - Google 検索
  10. Kozupon.com - logrotateの不思議!
  11. ITmedia エンタープライズ : Linux Tips「ログローテートツール「logrotate」を使いこなしたい」
  12. logrotateの設定 - KamoLand
  13. logrotateの基本的な設定 - satospo
  14. 「logrotate」の設定

ソーシャルブックマーク

  1. はてなブックマーク
  2. Google Bookmarks
  3. del.icio.us

ChangeLog

  1. Posted: 2009-09-21T15:46:21+09:00
  2. Modified: 2009-09-21T15:46:21+09:00
  3. Generated: 2017-01-31T23:09:20+09:00