Contents

logrotate 使用一般使用者指令執行方法

一般我們開發人員沒有權限,但有一般使用者可以使用 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
# 不會執行因為debug mode關係

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 設定 | 阿輝的零碎筆記 - 點部落

1
2
    daily                   #每天切割
    size=100M               #每100M做一次rotation,如果 weekly 與 size 這兩個設定都有加,表示如果檔案不到100M便不會生成rotation

線上產生工具

看過設定一輪,在看上面教學大概就會使用了。

Log Rotate Config Generator

登录文件的轮替 logrotate | Linux 系统教程(笔记)