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.