at_yasu's blog

ロード的なことを

Log Lotate

Apacheのログのロテーションに、logrotate というソフトが使われるそうですが、あえてそれを使わずnewsyslogを使う方法。

理由としてはインストールが面倒だから。


設定ファイル

/etc/newsyslog.conf が設定ファイルになる。文法は基本的に他のソフトの設定ファイルと同じで、「# 以降はコメント」「タブ/スペース区切り」「一行で一つの設定」となります。


文法

logfilename [owner:group] mode count size when flags [/pid_file] [sig_num]

  • logfilename
    • ロテーションするログファイルまでの絶対パス
  • [owner:group]
    • 保存しているファイルの所有者とグループ。数字もしくは、passwd/groupに書かれている名前
  • mode
    • ファイルパーミッション
  • count
    • 圧縮したファイルの保存数
  • size
    • この数値(キロバイト)まで来たら、ロテーションする。*の場合、サイズでのロテーションをしない。
  • when
    • 日付でロテーションをする場合、ここに値を入れる。*だと、日付でロテーションをしない
    • 厳密に日付で指定する方法
      • ISO8601 Format
      • @[[[[[cc]yy]mm]dd][T[hh[mm[ss]]]]]
    • 月や週や日で選択する方法
      • [Dhh],[Ww[Dhh]], [Mdd[Dhh]]
      • hh: 時間、0..23
      • w : 曜日、0..6、0 = 日曜日
      • dd: 日付、1..31、「L」もしくは「l」の時は、その月の末日になる。
      • Example
      • $D0 -- 毎日毎夜0時
      • $D23 -- 毎日23時 -- @T23 と同じ
      • $W0D23 -- 日曜23時
      • $W5D16 -- 金曜16時
      • $M1D0 -- 月初めの夜中0時
      • $M5D6 -- 毎月5日の朝6時。 -- @05T06 と同意
  • flags
    • オプション
    • B : newsyslogはログファイル末尾に、メッセージを入れる。バイナリーファイルや特殊なファイルの場合は、このBを入れて、メッセージを入れないようにする事が出来る。
    • C : ログファイルが無くなった場合を、コマンドラインで指定する?*1
    • D : ???*2
    • G : logfilename がシェルパターンで書いている場合は、Gでオプションを指定して。
    • J : Bzip2 で圧縮保存
    • N : シグナルを発行しない
    • U : ???*3
    • Z : GZipで圧縮保存
    • - : 何も指定しない
  • path_to_pid_file
    • プロセスのPIDが書いているファイルまでのパス。ロテーションがすんだら、HUPシグナルをプロセスに飛ばす
  • signal_number
    • 指定された番号のシグナルを、HUPシグナルの代わりに飛ばす


FreeBSD のみな気配?

*1:マニュアル読んで。よくわからない

*2:マニュアル読んで。よくわからない

*3:マニュアル読んで。よくわからない