Linux使用logrotate來(lái)切割日志文件
程序在運(yùn)行的時(shí)候?yàn)榱肆私膺\(yùn)行狀態(tài),會(huì)輸出日志文件,時(shí)間久了日志文件會(huì)變得非常大,甚至達(dá)到GB級(jí)別。我在golang應(yīng)用里使用logrus包來(lái)打日志,配置和使用都很方便,就是沒(méi)有日志分割的功能,應(yīng)用在線上運(yùn)行一個(gè)月后日志文件都已經(jīng)達(dá)到上百兆。后來(lái)發(fā)現(xiàn)了logrotate,這是centos自帶的日志分割工具,都不用安裝額外組件就能實(shí)現(xiàn)定時(shí)分割日志。
1.運(yùn)行原理
logrotate由系統(tǒng)的cron運(yùn)行,位置在/etc/cron.daily/logrotate
?
1 2 3 4 5 6 7 | /usr/sbin/logrotate -s /var/lib/logrotate/logrotate .status /etc/logrotate .conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
|
可以看到入口配置文件是/etc/logrotate.conf,依次運(yùn)行/etc/logrotate.conf.d里的配置文件 如果發(fā)現(xiàn)配置的logrotate沒(méi)有執(zhí)行,可以看下系統(tǒng)的crond服務(wù)有沒(méi)有開(kāi)啟
2.配置
如果有安裝nginx,可以參考nginx里的配置例子
?
1 2 3 4 5 6 7 8 9 10 11 12 | /var/log/nginx/ *log {
create 0644 nginx nginx
daily
rotate 10
missingok
notifempty
compress
sharedscripts
postrotate
/bin/kill -USR1 ` cat /run/nginx .pid 2> /dev/null ` 2> /dev/null || true
endscript
}
|
第一行定義的是日志文件的路徑,可以用*通配,一般可以定義成*.log來(lái)匹配所有日志文件。也可以指定多個(gè)文件,用空格隔開(kāi),比如
?
1 2 3 | /var/log/nginx/access .log /var/log/nginx/error .log {
}
|
花括號(hào)里面是日志切割相關(guān)的參數(shù),下面是常用的切割參數(shù)
compress 是否開(kāi)啟壓縮,壓縮格式gzip
不開(kāi)啟壓縮
compresscmd 自定義壓縮命令
compressexty 壓縮文件名后綴
compressoptions 壓縮選項(xiàng)
copy 復(fù)制一份文件
create 后面跟mode owner group,設(shè)置新日志文件的權(quán)限
daily 按天分割
weekly 按周分割
monthly 按月分割
rotate 后面跟數(shù)字,表示需要保留的文件歷史記錄,超過(guò)數(shù)量就會(huì)刪除,或者通過(guò)郵件發(fā)送
size 后面跟文件大小,比如100k、100M,超過(guò)這個(gè)大小后分割
missingok 忽略不存在的文件,不報(bào)錯(cuò)
notifempty 不分割空文件
sharedscripts 配合postrotate、prerotate,讓他們只執(zhí)行一次
postrotate/endscript 文件分割完后,執(zhí)行postrotate、endscript之間的命令
prerotate/endscript 文件分割完前,執(zhí)行prerotate、endscript之間的命令
下面看幾個(gè)例子
?
1 2 3 4 5 6 7 8 9 | /var/log/httpd/error .log {
rotate 5
mail i@wuyuans.com
size=100k
sharedscripts
postrotate
/sbin/killall -HUP httpd
endscript
}
|
切割/var/log/httpd/error.log日志文件,超過(guò)100k后切割,保留最新的5個(gè)歷史記錄,超過(guò)5個(gè)的郵件發(fā)送到fss@qq.com,postrotate里的的命令是為了讓httpd重新打開(kāi)日志文件。
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | /var/lib/mysql/mysqld .log {
notifempty
daily
rotate 3
missingok
compress
postrotate
會(huì)員登錄
賬號(hào)登錄還沒(méi)有賬號(hào)?立即注冊(cè)
-
售前咨詢
售前咨詢服務(wù)時(shí)間:09:00-23:30
售前值班
4006-75-4006
咨詢熱線:
4006-75-4006(09:00-23:30)
0871-6388 6388 (總機(jī))(工作日 09:00-18:00)
-
售后咨詢
售后咨詢服務(wù)時(shí)間:00:00-24:00
24H值班技術(shù)
4006-75-4006
-
備案咨詢
備案咨詢服務(wù)時(shí)間:09:00-18:00(工作日)
備案專業(yè)客服
0871-6388 6388
-
電話
0871-6388 6388 (總機(jī))
- 工單
-
二維碼
-
TOP
|