FreeBSD 4.7のマシンは、あまり動いていないので、家のサーバとして使っている FreeBSD 4.5の /var/log を見ましょう。
> uname -rs
FreeBSD 4.5-RELEASE
> pwd
/var/log
> ls
adduser maillog.0.gz sendmail.st.0
cron maillog.1.gz sendmail.st.1
cron.0.gz maillog.2.gz sendmail.st.10
cron.1.gz maillog.3.gz sendmail.st.2
cron.2.gz maillog.4.gz sendmail.st.3
cron.3.gz maillog.5.gz sendmail.st.4
dmesg.today maillog.6.gz sendmail.st.5
dmesg.yesterday maillog.7.gz sendmail.st.6
httpd-access.log messages sendmail.st.7
httpd-error.log messages.0.gz sendmail.st.8
lastlog messages.1.gz sendmail.st.9
log.chaco messages.2.gz setuid.today
log.jhon messages.3.gz slip.log
log.jhon.old messages.4.gz snmpd.log
log.mimi messages.5.gz userlog
log.nmb mount.today webmin
log.smb ppp.log wtmp
lpd-errs security wtmp.0
maillog sendmail.st
このように、0,1,2,.. とローテーションされていることがわかります。
次に newsyslog が起動される仕組み。
/usr/sbin/newsyslog は、cron によって指定された時間に起動されます。
デフォルトは、分が 0 になる時(9:00 とか 14:00)の設定です。
> which newsyslog
/usr/sbin/newsyslog
> cat /etc/crontab
# rotate log files every hour, if necessary
0 * * * * root newsyslog
newsyslog は、 /etc/newsyslog.conf の設定内容で動作します。
> cat /etc/newsyslog.conf
# logfilename [owner:group] mode count size when [ZJB] [/pid_file] [sig_num]
/var/log/cron 600 3 100 * Z
/var/log/amd.log 644 7 100 * Z
/var/log/kerberos.log 600 7 100 * Z
/var/log/lpd-errs 644 7 100 * Z
/var/log/maillog 644 7 * @T00 Z
/var/log/sendmail.st 644 10 * 168 B
/var/log/messages 644 5 100 * Z
/var/log/all.log 600 7 * @T00 Z
/var/log/slip.log 600 3 100 * Z
/var/log/ppp.log 600 3 100 * Z
/var/log/security 600 10 100 * Z
/var/log/wtmp 644 3 * @01T05 B
/var/log/daily.log 640 7 * @T00 Z
/var/log/weekly.log 640 5 1 $W6D0 Z
/var/log/monthly.log 640 12 * $M1D0 Z
/var/log/console.log 600 5 100 * Z
次のような書式になります。
logfilename [owner:group] mode count size when [ZJB] [/pid_file] [sig_num]
| logfilename |
保存されているシステムログファイル名。 |
| owner:group |
保存ログファイルの所有者とグループ名。オプション |
| mode |
保存ログファイルのパーミッション |
| count |
何回ローテーションするか。 |
| size |
ログファイルのサイズが size キロバイトに達した時に、ローテーションする指定。
アスタリスク (`*')に設定されていると、サイズは考慮しません。 |
| when |
ローテーションするタイミングが、インターバル、特定の時刻、もしくは両方の場合を設定できます。
時刻を指定した場合、指定した時刻の 1 時間以内に newsyslog が実行された時だけ、ローテーションします。
インターバル時間を指定した場合、最後のローテーションからその時間が経過した場合に、ローテーションします。
時刻とインターバルの両方が指定された場合は、両方の条件があった時(AND)に、ローテーションします。
タイムゾーンは指定できません。
時刻指定時は、`@' から始まるISO 8601 制限付時刻フォーマットと、
`$' から始まる日・週・月の時刻フォーマットがあります。
ISO 8601 制限付時刻フォーマットの T は、日付T時間のように時間の始まりを意味しますので、
@T00 であれば、日付設定無しで時間が 24:00 の意味。
@01T05 であれば、毎月 01 日の時間が 5:00 の意味。
日・週・月の時刻フォーマットの M は 月、W は週、D は日を意味しますので、
$W6D0 であれば、毎週土曜日の 24:00 の意味。
$M1D0 であれば、毎月1日の 24:00 の意味。
インターバルの場合は、時間を書くだけです。
168 は、168時間という意味です。
アスタリスク (`*')に設定されていると、この項目は考慮しません。 |
| [ZJB] |
ログ保存時のオプション。Z は、gzip で圧縮する意味。
J は、bzip で圧縮する意味。B は、バイナリの意味。指定しない時は、- を入れることも可能。 |
| [/pid_file] |
シグナルを送る DaemonのプロセスIDが保存されているファイルへのパス。 |
| [sig_num] |
シグナルを送る時、どのシグナルを送るかを設定。 |
先ほどのログディレクトリの cron とmaillog を見てみましょう。
> ls -la cron* maillog*
-rw------- 1 root wheel 99356 8/23 18:00 cron
-rw------- 1 root wheel 6494 4/14 00:00 cron.0.gz
-rw------- 1 root wheel 6560 3/ 2 23:00 cron.1.gz
-rw------- 1 root wheel 6385 2/15 2003 cron.2.gz
-rw------- 1 root wheel 6439 1/20 2003 cron.3.gz
-rw-r--r-- 1 root wheel 309 8/23 17:36 maillog
-rw-r--r-- 1 root wheel 282 8/21 00:00 maillog.0.gz
-rw-r--r-- 1 root wheel 178 8/10 00:00 maillog.1.gz
-rw-r--r-- 1 root wheel 430 7/27 00:00 maillog.2.gz
-rw-r--r-- 1 root wheel 319 4/14 00:00 maillog.3.gz
-rw-r--r-- 1 root wheel 169 3/ 7 00:00 maillog.4.gz
-rw-r--r-- 1 root wheel 368 3/ 6 00:00 maillog.5.gz
-rw-r--r-- 1 root wheel 382 3/ 3 00:00 maillog.6.gz
-rw-r--r-- 1 root wheel 163 2/20 2003 maillog.7.gz
cron は、パーミッションが 600 、ローテーションは3つまで、最大サイズが 100K 、時刻指定無し、gzip圧縮という設定です。
/var/log/cron 600 3 100 * Z
cron.0.gz をコピーして別名を展開してみましょう。
eden# cp cron.0.gz cron.0a.gz
eden# gzip -d cron.0a.gz
eden# ls -la cron.0a
-rw------- 1 root wheel 101639 Aug 23 20:55 cron.0a
100Kを超えていたからOKですね。
また、maillog はサイズ指定になっていないので、gzip後のファイルサイズがまちまちです。
FreeBSD 4.7機の /var/log を見てみます。
> ls -la
total 160
drwxr-xr-x 3 root wheel 512 Aug 17 06:00 .
drwxr-xr-x 20 root wheel 512 Mar 26 00:19 ..
-rw-r--r-- 1 root wheel 104 Mar 25 15:25 adduser
-rw------- 1 root wheel 5983 Aug 23 08:05 auth.log
-rw------- 1 root wheel 14852 Aug 23 08:05 cron
drwxr-xr-x 2 root wheel 512 Apr 10 22:51 cups
-rw-r--r-- 1 root wheel 28056 Aug 23 08:05 lastlog
-rw-r--r-- 1 root wheel 0 Oct 9 2002 lpd-errs
-rw-r----- 1 root wheel 5243 Aug 23 04:38 maillog
-rw-r--r-- 1 root wheel 87414 Aug 23 04:38 messages
-rw-r----- 1 root network 0 Oct 9 2002 ppp.log
-rw------- 1 root wheel 0 Oct 9 2002 security
-rw-r----- 1 root wheel 628 Aug 17 09:12 sendmail.st
-rw-r----- 1 root wheel 0 Aug 17 05:00 sendmail.st.0
-rw-r----- 1 root wheel 0 Mar 25 16:00 sendmail.st.1
-rw-r----- 1 root wheel 628 Mar 25 15:53 sendmail.st.2
-rw-r----- 1 root network 0 Oct 9 2002 slip.log
-rw-r--r-- 1 root wheel 4708 Aug 23 08:05 wtmp
ppp.log と slip.log のグループが network になっています。
/etc/newsyslog.conf を見ると、グループが指定されていました。
/var/log/cron 600 3 100 * Z
/var/log/amd.log 644 7 100 * Z
/var/log/auth.log 600 7 100 * Z
/var/log/kerberos.log 600 7 100 * Z
/var/log/lpd-errs 644 7 100 * Z
/var/log/maillog 640 7 * @T00 Z
/var/log/sendmail.st 640 10 * 168 B
/var/log/messages 644 5 100 * Z
/var/log/all.log 600 7 * @T00 Z
/var/log/slip.log root:network 640 3 100 * Z
/var/log/ppp.log root:network 640 3 100 * Z
/var/log/security 600 10 100 * Z
/var/log/wtmp 644 3 * @01T05 B
/var/log/daily.log 640 7 * @T00 Z
/var/log/weekly.log 640 5 1 $W6D0 Z
/var/log/monthly.log 640 12 * $M1D0 Z
/var/log/console.log 600 5 100 * Z
では、/var/log/messages の最大サイズを 80K にして newsyslog を直接起動させて見ましょう。
こんな感じに変更します。
#/var/log/messages 644 5 100 * Z
/var/log/messages 644 5 80 * Z
直接 newsyslog を起動するとわかりますが、ちょっと時間が掛かります。
mico# newsyslog
このようになります。
mico# pwd
/var/log
mico# ls -la messages*
-rw-r--r-- 1 root wheel 57 Aug 23 08:17 messages
-rw-r--r-- 1 root wheel 7389 Aug 23 08:17 messages.0.gz