FreeBSD ログローテ
FreeBSD では newsyslog でログローテする。
# vi newsyslog.conf # logfilename [owner:group] mode count size when flags [/pid_file] [sig_num] /var/log/all.log 600 7 * @T00 J /var/log/amd.log 644 7 100 * J /var/log/auth.log 600 7 100 * JC /var/log/httpd-access.log 644 7 * $W6D0 Z /var/run/httpd.pid 30 ・mode ログファイルのパーミッション。 ・count ログローテしたファイルを何個まで保存するかの指定。 ・size ログの最大サイズ。単位は KB。超えたらログローテする。 ・when ログローテするタイミング。sizeを指定している場合は無効。 フォーマットは、Dhh、Ww、WwDhh、Mdd、 MddDhhのどれか。 D:毎日 W:毎週 M:毎月 hh:時間(0〜23) w:曜日(0:日曜日〜6:土曜日) dd:日(1〜31) L:月の最後の日 ※$W6D0は毎週土曜日0時の意。 ・ZJB 圧縮の有無。省略可能。 Z:gz圧縮してログローテ J:bz圧縮してログローテ B:圧縮せずにそのままログローテ ・/pid_file ・sig_num ログファイルが切り替わった際に /pid_file のプロセスに対し sig_num のシグナルを送信する。 省略可能。 ※Apacheなど、常にログファイルをつかんでいるプロセスは newsyslog による ログファイルの切り替わりを検知できないため、ログファイルが切り替わった際に プロセスを再起動するなどして新しいログファイルにログを出力させる必要がある。 「/var/run/httpd.pid 30」は「httpdプロセスに対し SIGUSR1 のシグナルを送信する」という意味になる。 UNIX(POSIX) での SIGUSR1 の値は30番。 Apache における SIGUSR1 は graceful のシグナルとなるので、 「ログファイルが切り替わったら Apache を graceful で再起動させる」という意味になる。