Squid 運行久了,/var/log/squid/access.log、cache.log、store.log 體積暴增,佔滿磁盤、影響性能。需配置自動輪轉、壓縮、保留策略。
/var/log/squid/access.log {
daily # 每天輪轉
rotate 30 # 保留 30 個舊文件
compress # gzip 壓縮
delaycompress # 上一輪不壓縮,便於即時分析
missingok # 文件不存在不報錯
notifempty # 空文件不輪轉
create 640 squid squid # 新建文件權限、用戶組
sharedscripts # 多文件共用 postrotate 腳本
postrotate
/usr/sbin/squid -k rotate > /dev/null 2>&1 || true
endscript
}
/var/log/squid/cache.log {
weekly
rotate 8
compress
delaycompress
missingok
notifempty
create 640 squid squid
sharedscripts
postrotate
/usr/sbin/squid -k rotate > /dev/null 2>&1 || true
endscript
}
/var/log/squid/store.log {
weekly
rotate 4
compress
delaycompress
missingok
notifempty
create 640 squid squid
sharedscripts
postrotate
/usr/sbin/squid -k rotate > /dev/null 2>&1 || true
endscript
}
daily/weekly/monthly:輪轉頻率。rotate N:保留 N 個歸檔。compress:啟用 gzip,節省空間。delaycompress:最新歸檔不壓縮,下次輪轉時壓縮,方便 tail -f 實時看日志。postrotate ... endscript:輪轉後發送 squid -k rotate 信號,讓 Squid 重新打開日志文件(關鍵,否則 Squid 繼續寫舊 fd,新文件無內容)。sharedscripts:多文件匹配時只執行一次 postrotate。logrotate -d /etc/logrotate.d/squid # debug 模式,不實際執行
logrotate -f /etc/logrotate.d/squid # 強制執行一次
logfile_rotate 10 # 保留 10 個輪轉文件(配合 squid -k rotate)
# /etc/crontab 或 crontab -e -u squid
0 0 * * * squid /usr/sbin/squid -k rotate # 每天 00:00 輪轉
crontab /etc/crontab # 若編輯 /etc/crontab
# 或 systemctl reload cron
缺點:不支持壓縮、無 delaycompress、權限管理弱,建議遷移至 logrotate。
若 Squid 以 systemd 服務運行且配置 StandardOutput=journal、StandardError=journal,日志進入 journald,由 SystemMaxUse 限制總大小,無需額外輪轉。但傳統文件日志仍推薦 logrotate。
| 現象 | 原因 | 解決 |
|---|---|---|
| 輪轉後新文件無內容 | 未發送 squid -k rotate 或信號發送失敗 | 檢查 postrotate 腳本路徑、權限、Squid 進程是否存活 |
| 舊日志未壓縮 | 缺少 compress 或 delaycompress 邏輯誤解 | 確認配置,delaycompress 導致最新歸檔下次才壓縮 |
| 權限報錯 | create 指定的用戶組不存在 | 確認 squid 用戶組存在,或改為 root adm |
| 磁盤仍滿 | rotate 數量過大或頻率過低 | 調整 rotate、改 daily、啟用 compress |
/etc/logrotate.d/squid,由系統每日 /etc/cron.daily/logrotate 自動執行。access.log 設 daily rotate 30,cache.log 設 weekly rotate 8,store.log 視磁盤決定(建議關閉 store_log 節省 IO)。compress + delaycompress 平衡空間與實時分析。logrotate -d 檢查配置正確性。Squid 日志增長迅速,配置 logrotate + squid -k rotate 信號重開文件是標準解法。合理設置輪轉頻率、保留份數、壓縮策略,配合監控告警,即可徹底解決日志佔滿磁盤問題。