linux 小工具之:日誌切割(logrotate)
一、Logrotate簡介
logrotate 是Linux系統日誌檔案管理工具。用來把舊的日誌檔案刪除,並建立新的日誌檔案,我們把它叫做“轉儲”。(1)可以根據日誌檔案的大小,也可以按照日期來轉儲,這個過程一般通過 cron 程式來執行。
(2)logrotate 程式還可以用於壓縮日誌檔案,以及傳送日誌到指定的E-mail。
(3)預設的logrotate被加入cron的/etc/cron.daily中作為每日任務執行。
(4)/etc/logrotate.d/* 為/etc/logrotate.conf預設配置檔案的輔助包含配置檔案,目錄其中檔案也會被logrotate讀取,單獨指明特定日誌檔案的特定規則。
(5)/var/lib/logrotate.status中記錄logrotate上次輪換日誌檔案的時間。
(6)logrotate 基於系統Cron定時任務執行,所以生成日誌的時間可以在/etc/crontab中看到.
vi /etc/crontab
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
二、Logrotate除錯和手動執行:
logrotate 可以直接執行,後面跟配置檔案就可以了,如:/usr/sbin/logrotate -f /etc/logrotate.d/nginx
引數:
-v 顯示指令執行過程
-d Debug模式(模擬執行),詳細顯示指令執行過程,便於排錯或瞭解程式執行的情況。
-f 強制執行
-s <狀態檔案> 使用指定的狀態檔案
三、配置檔案配置
logrotate 的預設全域性配置檔案是 /etc/logrotate.conf ,輔助配置檔案:/etc/logrotate.d/*
主要引數:
daily:指定轉儲週期為每天 ,其他日期值:(weekly指定轉儲週期為每週、 monthly指定轉儲週期為每月、yearly 年 )
size size:當日志檔案到達指定的大小時才轉儲,Size 可以指定 bytes (預設)以及KB (sizek)或者MB (sizem).
dateext:在備份轉存檔案末尾新增當前日期
compress:通過gzip 壓縮轉儲以後的日誌
nocompress:不需要壓縮時,用這個引數
delaycompress和 compress 一起使用時,轉儲的日誌檔案到下一次轉儲時才壓縮
missingok: 在日誌輪循期間,任何錯誤將被忽略,例如“檔案無法找到”之類的錯誤。
create mode owner group:轉儲檔案,使用指定的檔案模式建立新的日誌檔案
ifempty:即使是空檔案也轉儲,這個是 logrotate 的預設選項。
notifempty:如果是空檔案的話,不轉儲
rotate 5:一次將儲存5個歸檔日誌。對於第六個歸檔,時間最久的歸檔將被刪除。,0 指沒有備份,5 指保留5 個備份
prerotate/endscript:在轉儲以前需要執行的命令可以放入這個對,這兩個關鍵字必須單獨成行
postrotate/endscript:在轉儲以後需要執行的命令可以放入這個對,這兩個關鍵字必須單獨成行
copytruncate:先把日誌內容複製到舊日誌檔案後才清除日誌檔案內容,可以保證日誌記錄的連續性nocopytruncate:備份日誌檔案但是不截斷
nocreate:不建立新的日誌檔案
nodelaycompress:覆蓋 delaycompress 選項,轉儲同時壓縮。
errors address:專儲時的錯誤資訊傳送到指定的Email 地址
mail address:把轉儲的日誌檔案傳送到指定的E-mail 地址
nomail:轉儲時不傳送日誌檔案
olddir directory:轉儲後的日誌檔案放入指定的目錄,必須和當前日誌檔案在同一個檔案系統
noolddir轉儲後的日誌檔案和當前日誌檔案放在同一個目錄下
tabootext [+] list讓logrotate: 不轉儲指定副檔名的檔案,預設的副檔名是:.rpm-orig, .rpmsave, v, 和 ~
四、測試用例
crontab -e
59 23 * * * /usr/sbin/logrotate -f /etc/logrotate.d/nginx # 把Nginx日誌全部轉儲
vi /etc/logrotate.d/nginx
/var/log/nginx/*.log {
daily#指定轉儲週期為每天
missingok
rotate 52
compress#通過gzip 壓縮轉儲以後的日誌
delaycompress#和 compress 一起使用時,轉儲的日誌檔案到下一次轉儲時才壓縮
ifempty
create 0640 www-data adm
sharedscripts
postrotate
#kill -USR1 `cat /var/run/nginx.pid不是中止Nginx的程式,而是傳遞給它訊號重新生成日誌,如果nginx沒啟動不做操作
[ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
endscript
}
Q&A
1.如何測試logrotate程式執行的情況
答:/usr/sbin/logrotate -d /etc/logrotate.d/nginx
2.怎麼檢視log檔案的具體執行情況
答:cat /var/lib/logrotate/status
3.使用-v或-d引數時,顯示log does not need rotating
答:logrotate在對status未記錄的檔案進行轉儲時,會在status新增一條該檔案的記錄,並將操作時間設為當天。之後程式再次對此檔案進行轉儲時發現這個檔案今天已經操作過,就不再進行相關操作。
解決方法:1. vi /var/lib/logrotate/status 更改相對應的檔案操作日期
2. 使用-s指定狀態檔案
4.分割日誌時報錯:error: skipping "/var/log/nginx/test.access.log" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation.
答:新增“su root list”到/etc/logrotate.d/nginx檔案中即可
如下;
/var/log/nginx/*.log {
su root list
daily
missingok
rotate 52
compress
delaycompress
notifempty
#ifempty
create 0640 www-data adm
sharedscripts
postrotate
[ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
endscript
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23890223/viewspace-2124714/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- tomcat日誌切割-logrotateTomcatlogrotate
- nginx1.24配置logrotate日誌切割Nginxlogrotate
- 日誌切割logrotate和定時任務crontab詳解logrotate
- 使用logrotate 管理Linux日誌檔logrotateLinux
- [技術分享]日誌切割(按天切割日誌)
- 使用logrotate 管理Linux日誌檔(zt)logrotateLinux
- nginx切割日誌Nginx
- nginx日誌切割Nginx
- Linux 下 logrotate 日誌輪詢操作梳理Linuxlogrotate
- Linux日誌管理神器logrotate使用簡介Linuxlogrotate
- Logrotate日誌切割報錯 檔案不再同一個使用者組下logrotate
- 運維中的日誌切割操作梳理(Logrotate/python/shell指令碼實現)運維logrotatePython指令碼
- nginx日誌切割配置Nginx
- Apache 配置日誌切割Apache
- 日誌切分神器--logrotatelogrotate
- logrotate自動輪換切割壓縮和清理歷史日誌場景介紹logrotate
- 【shell】日誌切割指令碼指令碼
- Linux-通用性日誌切割指令碼Linux指令碼
- 使用logrotate配置日誌輪詢logrotate
- 日誌管理工具logrotatelogrotate
- 使用logrotate管理日誌檔案logrotate
- 如何定時切割nginx日誌?Nginx
- 【awk】按小時切割日誌
- 在Linux中,如何使用logrotate命令管理日誌檔案?Linuxlogrotate
- 使用logrotate來壓縮日誌(轉)logrotate
- 使用logrotate 管理日誌檔案(轉)logrotate
- Go中使用Zap日誌庫與Lumberjack日誌切割Go
- nginx自己寫日誌切割指令碼Nginx指令碼
- nginx自動切割訪問日誌Nginx
- nginx高階訪客日誌切割Nginx
- linux系統伺服器,nginx日誌切割儲存教程。Linux伺服器Nginx
- 華納雲:Linux中如何用logrotate管理每日增長的日誌Linuxlogrotate
- Nginx實戰(三) 日誌配置與切割Nginx
- 【shell】實現tomcat日誌切割功能Tomcat
- 如何使用 logrotate 命令保持日誌檔案更新logrotate
- linux中用shell指令碼對tomcat和nginx做日誌切割Linux指令碼TomcatNginx
- Ngnix 日誌管理及 Shell 實現定時完成日誌切割
- logrotate 不支援不同裝置間的日誌轉儲logrotate