生產環境常見程式直接重導向輸出至日誌檔,久而久之單一檔案膨脹甚至撐爆磁碟。各專案重複撰寫輪轉邏輯不僅繁瑣,更常被忽略。本腳本 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 清空原檔,確保寫入端文件描述符有效。
dash 不支援陣列,腳本以 POSIX sh 寫法相容truncate 指令可用(coreutils 套件)