一般我們開發人員沒有權限,但有一般使用者可以使用 logrotate ,就不用自幹 Shell Script 指令,還能做多樣化設定。
先前文章有研究到logrotate 自動切割 log 小記 | 程式狂想筆記 ,但都沒實戰。
使用發法(請看第一、三個指令) 1 2 3 4 5 6 7 8 logrotate -s /home/project/logrotate/status -v -d /home/project/logrotate/pbci.conf logrotate -s /home/project/logrotate/status -vf -d /home/project/logrotate/pbci.conf logrotate -s /home/project/logrotate/status -vf /home/project/logrotate/pbci.conf
-s
可指定一般使用者執行路徑,會存status
檔案。
https://github.com/logrotate/logrotate/issues/80
-d
debug 模式是呼不會執行
網路上完整教學文章 推薦看Linux日志切割神器logrotate原理介绍和配置详解 - 知乎 !!!備份圖!!! 摘要幾個重點。
1 2 3 4 5 6 logrotate [OPTION...] <configfile> -d, --debug :debug 模式,測試配置文件是否有錯誤。 -f, --force :強制轉儲文件。 -m, --mail=command :壓縮日誌後,發送日誌到指定郵箱。 -s, --state=statefile :使用指定的狀態文件。 -v, --verbose :顯示轉儲過程。
1 2 3 4 5 6 7 8 9 10 11 12 [root@localhost ~]# logrotate -d /etc/logrotate.d/log_file reading config file /etc/logrotate.d/log_file reading config info for /var/log/log_file Handling 1 logs rotating pattern: /var/log/log_file monthly (5 rotations) empty log files are not rotated, old logs are removed considering log /var/log/log_file log does not need rotating not running postrotate script, since no logs were rotated
正如我們從上面的輸出結果可以看到的,logrotate 判斷該輪循是不必要的。如果文件的時間小於一天,這就會發生了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 常見配置參數 daily :指定轉儲週期為每天weekly :指定轉儲週期為每週monthly :指定轉儲週期為每月rotate count :指定日誌文件刪除之前轉儲的次數,0 指沒有備份,5 指保留 5 個備份tabooext [+] list:讓 logrotate 不轉儲指定擴展名的文件, 缺省的擴展名是:.rpm-orig, .rpmsave, v, 和~ missingok:在日誌輪循期間,任何錯誤將被忽略,例如 「文件無法找到」 之類的錯誤。size size:當日誌文件到達指定的大小時才轉儲,bytes (缺省) 及 KB (sizek) 或 MB (sizem) compress: 通過 gzip 壓縮轉儲以後的日誌 nocompress: 不壓縮copytruncate:用於還在打開中的日誌文件, 把當前日誌備份並截斷nocopytruncate: 備份日誌文件但是不截斷create mode owner group : 轉儲文件,使用指定的文件模式創建新的日誌文件 nocreate: 不建立新的日誌文件 delaycompress: 和 compress 一起使用時,轉儲的日誌文件到下一次轉儲時才壓縮 nodelaycompress: 覆蓋 delaycompress 選項,轉儲同時壓縮。 errors address : 專儲時的錯誤信息發送到指定的 Email 地址 ifempty :即使是空文件也轉儲,這個是 logrotate 的缺省選項。 notifempty :如果是空文件的話,不轉儲mail address : 把轉儲的日誌文件發送到指定的 E-mail 地址 nomail : 轉儲時不發送日誌文件olddir directory:儲後的日誌文件放入指定的目錄,必須和當前日誌文件在同一個文件系統 noolddir: 轉儲後的日誌文件和當前日誌文件放在同一個目錄下prerotate/ endscript: 在轉儲以前需要執行的命令可以放入這個對,這兩個關鍵字必須單獨成行
設定(範例) 每天備分(copytruncate),保留30天 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 /Project/logs/batch/*.log { daily dateext missingok rotate 30 notifempty copytruncate } /Project/logs/oxProject/*.log { daily dateext missingok rotate 30 notifempty copytruncate }
備份後做壓縮檔 compress ->做壓縮 delaycompress -> 延遲最新檔案不做壓縮
參考使用 logrotate 定期整理 Rails Log 檔案 – ihower { blogging } 1 2 3 4 5 6 7 8 9 10 11 # Rotate Rails application logs /path/to/your/rails/current/log/*.log { daily dateext missingok rotate 65535 compress delaycompress notifempty copytruncate }
檔案日誌超過幾MB做輪替 [Linux] logrotate 設定 | 阿輝的零碎筆記 - 點部落
daily #每天切割
size=100M #每100M做一次rotation,如果 weekly 與 size 這兩個設定都有加,表示如果檔案不到100M便不會生成rotation
線上產生工具 看過設定一輪,在看上面教學大概就會使用了。
Log Rotate Config Generator
登录文件的轮替 logrotate | Linux 系统教程(笔记)