首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

通用日誌輪轉腳本:告別單一巨型日誌檔案困擾

     編輯:關於C語言

腳本緣起與核心功能

生產環境常見程式直接重導向輸出至日誌檔,久而久之單一檔案膨脹甚至撐爆磁碟。各專案重複撰寫輪轉邏輯不僅繁瑣,更常被忽略。本腳本 log_rotater.sh 提供通用、可部署、零侵入的按大小輪轉方案。

核心特性

  • 支援多目錄掃描(透過 dirs.list 指定,動態生效無需重啟)
  • 預設處理 .log 副檔名,易修改擴充
  • 保留 backup_count 份歷史檔(預設 10),單檔超過 backup_size(預設 200MB)觸發輪轉
  • 使用 truncate 而非 mv,保持 inode 不變,不影響正在寫入的進程
  • 檢測間隔 backup_interval 可配置(預設 60 秒)

部署方式

# 方式一:放置於日誌目錄直接啟動
nohup ./log_rotater.sh > /dev/null &

# 方式二:放置任意目錄,修改 backup_dir 指向日誌目錄
backup_dir=/var/log/myapp

關鍵實作細節

採用 awk 解析 ls -l 取得檔案大小與名稱,輪轉時從最大編號遞減重命名(.9 → .10),最後 cp 當前檔為 .1 再 truncate 清空原檔,確保寫入端文件描述符有效。

注意事項

  • Ubuntu 預設 dash 不支援陣列,腳本以 POSIX sh 寫法相容
  • 執行前確認 truncate 指令可用(coreutils 套件)
  • 高頻寫入場景建議縮短檢測間隔或降低觸發閾值
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved