日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

运维基础(13)日志切割工具 Logrotate

發布時間:2025/3/20 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 运维基础(13)日志切割工具 Logrotate 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Logrotate 程序是一個日志文件管理工具,用于分割日志文件,壓縮轉存、刪除舊的日志文件,并創建新的日志文件,下面就對 logrotate 日志輪轉的記錄:

?

Linux 系統默認安裝 logrotate,默認的配置文件:

/etc/logrotate.conf

/etc/logrotate.d/

logrotate.conf:為主配置文件

logrotate.d:為配置相關子系統,用于隔離每個應用配置(Nginx、PHP、Tomcat...)

Logrotate 是基于 CRON 來運行的,其腳本是 /etc/cron.daily/logrotate,日志輪轉是系統自動完成的。

實際運行時,Logrotate 會調用配置文件 /etc/logrotate.conf。

Logrotate 可以由自動或者手動觸發日志輪轉:

logrotate -f /etc/logrotate.d/nginx

logrotate -f /etc/logrotate.d/php

不過正式執行前最好通過 Debug 選項來驗證一下(-d參數)

具體 logrotate 命令格式如下:

logrotate [OPTION...] <configfile>

-d, --debug :debug 模式,測試配置文件是否有錯誤。

-f, --force :強制轉儲文件。

-m, --mail=command :壓縮日志后,發送日志到指定郵箱。

-s, --state=statefile :使用指定的狀態文件。

-v, --verbose :顯示轉儲過程。

查看 logrotate.conf 配置:

cat /etc/logrotate.conf

weekly //默認每一周執行一次 rotate 輪轉工作

rotate 4 //保留多少個日志文件(輪轉幾次).默認保留四個.就是指定日志文件刪除之前輪轉的次數,0 指沒有備份

create //自動創建新的日志文件,新的日志文件具有和原來的文件相同的權限;因為日志被改名,因此要創建一個新的來繼續存儲之前的日志

dateext //這個參數很重要!就是切割后的日志文件以當前日期為格式結尾,如xxx.log-20131216這樣,如果注釋掉,切割出來是按數字遞增,即前面說的 xxx.log-1這種格式

compress //是否通過 gzip 壓縮轉儲以后的日志文件,如 xxx.log-20131216.gz ;如果不需要壓縮,注釋掉就行

include /etc/logrotate.d //導入/etc/logrotate.d/ 目錄中的各個應用配置

/var/log/wtmp { //僅針對 /var/log/wtmp 所設定的參數

monthly //每月一次切割,取代默認的一周

minsize 1M //文件大小超過 1M 后才會切割

create 0664 root utmp //指定新建的日志文件權限以及所屬用戶和組

rotate 1 //只保留一個日志.

}

#這個 wtmp 可記錄用戶登錄系統及系統重啟的時間

#因為有 minsize 的參數,因此不見得每個月一定會執行一次喔.要看文件大小。

Logrotate中其他可配置參數,具體如下:

compress //通過 gzip 壓縮轉儲以后的日志

nocompress //不做 gzip 壓縮處理

copytruncate //用于還在打開中的日志文件,把當前日志備份并截斷;是先拷貝再清空的方式,拷貝和清空之間有一個時間差,可能會丟失部分日志數據。

nocopytruncate //備份日志文件不過不截斷

create mode owner group //輪轉時指定創建新文件的屬性,如create 0777 nobody nobody

nocreate //不建立新的日志文件

delaycompress //和 compress 一起使用時,轉儲的日志文件到下一次轉儲時才壓縮

nodelaycompress //覆蓋 delaycompress 選項,轉儲同時壓縮。

missingok //如果日志丟失,不報錯繼續滾動下一個日志

errors address //專儲時的錯誤信息發送到指定的Email 地址

ifempty //即使日志文件為空文件也做輪轉,這個是 logrotate 的缺省選項。

notifempty //當日志文件為空時,不進行輪轉

mail address //把轉儲的日志文件發送到指定的 E-mail 地址

nomail //轉儲時不發送日志文件

olddir directory //轉儲后的日志文件放入指定的目錄,必須和當前日志文件在同一個文件系統

noolddir //轉儲后的日志文件和當前日志文件放在同一個目錄下

sharedscripts //運行 postrotate 腳本,作用是在所有日志都輪轉后統一執行一次腳本。如果沒有配置這個,那么每個日志輪轉后都會執行一次腳本

prerotate //在 logrotate 轉儲之前需要執行的指令,例如修改文件的屬性等動作;必須獨立成行

postrotate //在 logrotate 轉儲之后需要執行的指令,例如重新啟動 (kill -HUP) 某個服務!必須獨立成行

daily //指定轉儲周期為每天

weekly //指定轉儲周期為每周

monthly //指定轉儲周期為每月

rotate count //指定日志文件刪除之前轉儲的次數,0 指沒有備份,5 指保留5 個備份

dateext //使用當期日期作為命名格式

dateformat .%s //配合 dateext 使用,緊跟在下一行出現,定義文件切割后的文件名,必須配合 dateext 使用,只支持 %Y %m %d %s 這四個參數

size(或 minsize) log-size //當日志文件到達指定的大小時才轉儲,log-size 能指定 bytes(缺省)及 KB (sizek)或 MB(sizem).

當日志文件 >= log-size 的時候就轉儲。以下為合法格式:(其他格式的單位大小寫沒有試過)

size = 5 或 size 5 (>= 5 個字節就轉儲)

size = 100k 或 size 100k

size = 100M 或 size 100M

vim /etc/logrotate.d/nginx

/var/log/weblog/*.log {

? ?daily? //指定轉儲周期為每天

? ?compress? //通過 gzip 壓縮轉儲以后的日志

? ?rotate 7? //保存7天的日志

? ?missingok? //如果日志文件丟失,不要顯示錯誤?

? ?notifempty? //當日志文件為空時,不進行輪轉

? ?dateext? //使用當期日期作為命名格式,exp:nginx_access.log-20190120

? ?sharedscripts? //運行 postrotate 腳本

? ?postrotate? //執行的指令

? ? ? ?if [ -f /run/nginx.pid ]; then?

? ? ? ? ? ? ? ? ?kill -USR1 `cat /run/nginx.pid`

? ? ? ?fi

? ?endscript? //結束指令

}?

vim /etc/logrotate.d/nginx

/usr/local/php/var/log/*.log {

daily

compress

rotate7

missingok

notifempty

dateext

sharedscripts

postrotate

?if [ -f /usr/local/php/var/run/php-fpm.pid ]; then?

? ? kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`?

?fi

endscript

}?

由于 Logrotate 是基于 CRON 運行的,所以這個日志輪轉的時間是由CRON 控制的,具體可以查詢 CRON 的配置文件 /etc/anacrontab,過往的老版本的文件為(/etc/crontab)

查看輪轉文件:/etc/anacrontab

cat /etc/anacrontab

? ? SHELL=/bin/sh

? ? PATH=/sbin:/bin:/usr/sbin:/usr/bin

? ? MAILTO=root

? ? RANDOM_DELAY=45

? ? START_HOURS_RANGE=3-22

? ? 1? ?5? ?cron.daily? ? ? nice run-parts /etc/cron.daily

? ? 7? ?25? cron.weekly? ? ?nice run-parts/etc/cron.weekly

? ? @monthly 45 cron.monthly? ? ? ? nice run-parts/etc/cron.monthly

使用 anacrontab 輪轉的配置文件,日志切割的生效時間是在凌晨3點到22點之間,而且隨機延遲時間是45分鐘,但是這樣配置無法滿足我們在現實中的應用

現在的需求是將切割時間調整到每天的晚上12點,即每天切割的日志是前一天的0-24點之間的內容,操作如下:

mv /etc/anacrontab /etc/anacrontab.bak? ? ? ? ? //取消日志自動輪轉的設置

使用 crontab 來作為日志輪轉的觸發容器來修改 Logrotate 默認執行時間

vi /etc/crontab?

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

HOME=/?

# run-parts

01 * * * * root run-parts /etc/cron.hourly

59 23 * * * root run-parts /etc/cron.daily

22 4 * * 0 root run-parts /etc/cron.weekly

42 4 1 * * root run-parts /etc/cron.monthly

現象說明:

使用 logrotate 輪詢 nginx 日志,配置好之后,發現nginx日志連續兩天沒被切割,檢查后確定配置文件一切正常,這是為什么呢?

強行啟動記錄文件維護操作,縱使 logrotate 指令認為沒有需要,應該有可能是 logroate 認為 nginx 日志太小,不進行輪詢。

故需要強制輪詢,即在/etc/cron.daily/logrotate腳本中將 -t 參數替換成 -f 參數

vim /etc/cron.daily/logrotate

#!/bin/sh

/usr/sbin/logrotate /etc/logrotate.conf

EXITVALUE=$?

if [ $EXITVALUE != 0 ]; then

? ? /usr/bin/logger -f logrotate "ALERT exited abnormally with [$EXITVALUE]"

fi

exit 0

最后最后重啟下cron服務:

/etc/init.d/crond restart

Stopping crond: [ OK ]

Starting crond: [ OK ]

往期回顧:

運維基礎(1)Nginx https://blog.csdn.net/XMWS_IT/article/details/118572320

運維基礎(2)實用工具篇 https://blog.csdn.net/XMWS_IT/article/details/118602947

運維基礎(3)備份篇 https://blog.csdn.net/XMWS_IT/article/details/118728080

運維基礎(4)流量監控工具篇 https://blog.csdn.net/XMWS_IT/article/details/119148733

運維基礎(5)Ansible https://blog.csdn.net/XMWS_IT/article/details/119204923

運維基礎(6)CI / CD https://blog.csdn.net/XMWS_IT/article/details/119343374

運維基礎(7)Ansible Tower https://blog.csdn.net/XMWS_IT/article/details/119418164

運維基礎(8)shell腳本https://blog.csdn.net/XMWS_IT/article/details/119636873

運維基礎(9)Linux性能調優三大系統https://blog.csdn.net/XMWS_IT/article/details/119817630

運維基礎(10)linux被刪數據恢復方法 https://blog.csdn.net/XMWS_IT/article/details/119948718

運維基礎(11)Linux服務器性能優化https://blog.csdn.net/XMWS_IT/article/details/120039039

運維基礎(12)服務器12種基本故障+排查方法https://blog.csdn.net/XMWS_IT/article/details/120150998

?

?

?

?

?

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的运维基础(13)日志切割工具 Logrotate的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。