QMail 的 Log 纪录档一般会储存在 /var/log/qmail/ 下,然后将每一个服务分开储存到各自的目录,目录下会有一个 current 档案,这个就是 QMail 的 Log, 例如 smtpd 的 Log 在 /var/log/qmail/smtpd/current.
这个 current 档案默认会在 100KB 时自动清空加入新内容,要调高这个限制,可以开启 log/run 档案,例如 smtpd:
找到类似这行类似:
exec setuidgid $LOGUSER multilog t n5 s16777215 /var/log/qmail/smtpd/
上面的 “s16777215” 表示 16MB (前面要加 s),即 daemontools 下的 multilog 会在 smtpd/current 到达 16MB 时自动清空加入新内容。
但这个 s16777215 已经是 multilog 的设定值上限,即使设定更大的数值,还是会在 16MB 时清空纪录档。但我的 Email Server 比较繁忙,大约 5 至 6 个小时便满了,对于想写一些 Script 统计 QMail 的使用量很不方便,这个需要修改 daemontools 的程式码,以下是我建立的 multilog patch,实际上只时改了一行程式码:
下载: multilog_filesize_limit.patch
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
--- daemontools-0.76/src/multilog.old.c 2018-04-06 18:22:01.174488900 +0800 +++ daemontools-0.76/src/multilog.c 2018-04-06 18:09:43.794314092 +0800 @@ -398,7 +398,9 @@ if (script[i][0] == 's') { scan_ulong(script[i] + 1,&size); if (size < 4096) size = 4096; - if (size > 16777215) size = 16777215; + //update 16MB log size limit to 100MB + //if (size > 16777215) size = 16777215; + if (size > 104857600) size = 104857600; } else if (script[i][0] == 'n') { scan_ulong(script[i] + 1,&num); |
安装 patch 后需要重新编译 daemontools, 之后 multilog 的档案上限会提高为 104857600 bytes, 即 100MB。
最后需要更新 /var/qmail/supervise/qmail-smtpd/log/run 设定新的档案上限,并重新启动 QMail.