亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

linux日志輪詢方案

 更新時(shí)間:2024年10月14日 10:50:50   作者:loveLifeLoveCoding  
Linux系統(tǒng)中的日志文件會(huì)隨時(shí)間增長(zhǎng),手動(dòng)清理較為繁瑣,logrotate程序可自動(dòng)執(zhí)行日志文件的輪換、壓縮、刪除和郵件發(fā)送,節(jié)省磁盤空間,logrotate基于crontab運(yùn)行,調(diào)用配置文件/etc/logrotate.conf,用戶可在/etc/logrotate.d目錄放置自定義配置文件

logrotate 簡(jiǎn)介

一般來說,日志是任何故障排除過程中非常重要的一部分,但這些日志會(huì)隨著時(shí)間增長(zhǎng)。在這種情況下,我們需要手動(dòng)執(zhí)行日志清理以回收空間,這是一件繁瑣的管理任務(wù)。為了解決這個(gè)問題,我們可以在 Linux 中配置 logrotate 程序,它可以自動(dòng)執(zhí)行日志文件的輪換、壓縮、刪除和用郵件發(fā)出。

我們可以配置 logrotate 程序,以便每個(gè)日志文件可以在每天、每周、每月或當(dāng)它變得太大時(shí)處理。

logrotate軟件是一個(gè)日志管理工具,用于 切割日志,刪除舊的日志文件,并創(chuàng)建新的日志文件,起到“轉(zhuǎn)儲(chǔ)作用”,可以為系統(tǒng)節(jié)省磁盤空間。一般centos系統(tǒng)已經(jīng)自帶安裝好了。

logrotate是基于 crontab 運(yùn)行的,運(yùn)行時(shí),logrotate 會(huì)調(diào)用配置文件 /etc/logrotate.conf 。可以在 /etc/logrotate.d 目錄里放置自定義好的配置文件,用來覆蓋 logrotate.conf 的缺省值。

logrotate 版本查看

root@test 10:14:51:/usr# logrotate --version
logrotate 3.11.0

logrotate 配置文件

  • 命令: /usr/sbin/logrotate
  • 配置文件: /etc/logrotate.conf

這是 logrotate 的主配置文件。logrotate 還在 /etc/logrotate.d/ 中存儲(chǔ)了特定服務(wù)的配置。

確保下面的那行包含在 /etc/logrotate.conf 中,以讀取特定服務(wù)日志配置。
include  /etc/logrotate.d`

logrotate 歷史:

/var/lib/logrotate/logrotate.status

日志回滾原理

當(dāng)日志達(dá)到某個(gè)特定的大小,我們將日志分類,之前的日志保留一個(gè)備份,再產(chǎn)生的日志創(chuàng)建一個(gè)同名的文件保存新的日志.

重要的 logrotate 選項(xiàng):

compress                                   通過gzip 壓縮轉(zhuǎn)儲(chǔ)以后的日志
nocompress                                不做gzip壓縮處理
copytruncate                              用于還在打開中的日志文件,把當(dāng)前日志備份并截?cái)?;是先拷貝再清空的方式,拷貝和清空之間有一個(gè)時(shí)間差,可能會(huì)丟失部分日志數(shù)據(jù)。
nocopytruncate                           備份日志文件不過不截?cái)?
create mode owner group             輪轉(zhuǎn)時(shí)指定創(chuàng)建新文件的屬性,如create 0777 nobody nobody
nocreate                                    不建立新的日志文件
delaycompress                           和compress 一起使用時(shí),轉(zhuǎn)儲(chǔ)的日志文件到下一次轉(zhuǎn)儲(chǔ)時(shí)才壓縮
nodelaycompress                        覆蓋 delaycompress 選項(xiàng),轉(zhuǎn)儲(chǔ)同時(shí)壓縮。
missingok                                 如果日志丟失,不報(bào)錯(cuò)繼續(xù)滾動(dòng)下一個(gè)日志
errors address                           專儲(chǔ)時(shí)的錯(cuò)誤信息發(fā)送到指定的Email 地址
ifempty                                    即使日志文件為空文件也做輪轉(zhuǎn),這個(gè)是logrotate的缺省選項(xiàng)。
notifempty                               當(dāng)日志文件為空時(shí),不進(jìn)行輪轉(zhuǎn)
mail address                             把轉(zhuǎn)儲(chǔ)的日志文件發(fā)送到指定的E-mail 地址
nomail                                     轉(zhuǎn)儲(chǔ)時(shí)不發(fā)送日志文件
olddir directory                         轉(zhuǎn)儲(chǔ)后的日志文件放入指定的目錄,必須和當(dāng)前日志文件在同一個(gè)文件系統(tǒng)
noolddir                                   轉(zhuǎn)儲(chǔ)后的日志文件和當(dāng)前日志文件放在同一個(gè)目錄下
sharedscripts                           運(yùn)行postrotate腳本,作用是在所有日志都輪轉(zhuǎn)后統(tǒng)一執(zhí)行一次腳本。如果沒有配置這個(gè),那么每個(gè)日志輪轉(zhuǎn)后都會(huì)執(zhí)行一次腳本
prerotate                                 在logrotate轉(zhuǎn)儲(chǔ)之前需要執(zhí)行的指令,例如修改文件的屬性等動(dòng)作;必須獨(dú)立成行
postrotate                               在logrotate轉(zhuǎn)儲(chǔ)之后需要執(zhí)行的指令,例如重新啟動(dòng) (kill -HUP) 某個(gè)服務(wù)!必須獨(dú)立成行
daily                                       指定轉(zhuǎn)儲(chǔ)周期為每天
weekly                                    指定轉(zhuǎn)儲(chǔ)周期為每周
monthly                                  指定轉(zhuǎn)儲(chǔ)周期為每月
rotate count                            指定日志文件刪除之前轉(zhuǎn)儲(chǔ)的次數(shù),0 指沒有備份,5 指保留5 個(gè)備份
dateext                                  使用當(dāng)期日期作為命名格式
dateformat .%s                       配合dateext使用,緊跟在下一行出現(xiàn),定義文件切割后的文件名,必須配合dateext使用,只支持 %Y %m %d %s 這四個(gè)參數(shù)
size(或minsize) log-size            當(dāng)日志文件到達(dá)指定的大小時(shí)才轉(zhuǎn)儲(chǔ),log-size能指定bytes(缺省)及KB (sizek)或MB(sizem).
當(dāng)日志文件 >= log-size 的時(shí)候就轉(zhuǎn)儲(chǔ)。 以下為合法格式:(其他格式的單位大小寫沒有試過)
size = 5 或 size 5 (>= 5 個(gè)字節(jié)就轉(zhuǎn)儲(chǔ))
size = 100k 或 size 100k
size = 100M 或 size 100M

sshd 日志回滾實(shí)戰(zhàn)

修改配置文件

[root@ localhost cron.daily]# vim /etc/logrotate.conf
/var/log/sshd.log {         #  指定的是要切割的日志文件
    missingok               # 如果文件丟失不報(bào)錯(cuò)
    monthly                 # 每月輪換一次
    create 0664 root utmp   # 設(shè)置sshd.log這個(gè)文件的屬主和屬組
    minsize 10M             # 文件超過10M進(jìn)行回滾
    rotate 2                # 日志進(jìn)行分割后,保留兩份歷史數(shù)據(jù)
}

重啟rsyslog

[root@ localhost cron.daily]# systemctl restart rsyslog

強(qiáng)制切割

[root@ localhost cron.daily]# logrotate –vf /etc/logrotate.conf
[root@ localhost cron.daily]# cd /var/log/
[root@ localhost log]# ll sshd.log 
-rw------- 1 root root 0 2019-11-29 14:00 sshd.log
# 切割完之后,源文件大小變?yōu)?

日志切割,是可以按照文件的大小和時(shí)間來進(jìn)行切割

以系統(tǒng)日志/var/log/message做切割來簡(jiǎn)單說明下:

  • 第一次執(zhí)行完rotate(輪轉(zhuǎn))之后,原本的messages會(huì)變成messages.1,而且會(huì)制造一個(gè)空的messages給系統(tǒng)來儲(chǔ)存日志;
  • 第二次執(zhí)行之后,messages.1會(huì)變成messages.2,而messages會(huì)變成messages.1,又造成一個(gè)空的messages來儲(chǔ)存日志!
  • 如果僅設(shè)定保留三個(gè)日志(即輪轉(zhuǎn)3次)的話,那么執(zhí)行第三次時(shí),則 messages.3這個(gè)檔案就會(huì)被刪除,并由后面的較新的保存日志所取代!也就是會(huì)保存最新的幾個(gè)日志。
  • 日志究竟輪換幾次,這個(gè)是根據(jù)配置文件中的rotate參數(shù)來判定的。

測(cè)試和運(yùn)行 logrotate

如果等不及cron自動(dòng)執(zhí)行日志輪轉(zhuǎn),想手動(dòng)強(qiáng)制切割日志,需要加-f參數(shù);不過正式執(zhí)行前最好通過Debug選項(xiàng)來驗(yàn)證一下(-d參數(shù)),這對(duì)調(diào)試也很重要

/usr/sbin/logrotate -f /etc/logrotate.d/nginx
/usr/sbin/logrotate -d -f /etc/logrotate.d/nginx 

具體 logrotate 命令格式如下:

logrotate [OPTION...] <configfile>
-d, --debug :debug 模式,測(cè)試配置文件是否有錯(cuò)誤。
-f, --force :強(qiáng)制轉(zhuǎn)儲(chǔ)文件。
-m, --mail=command :壓縮日志后,發(fā)送日志到指定郵箱。
-s, --state=statefile :使用指定的狀態(tài)文件。
-v, --verbose :顯示轉(zhuǎn)儲(chǔ)過程。

debug 模式

并不會(huì)真正進(jìn)行 rotate 或者 compress 操作,但是會(huì)打印出整個(gè)執(zhí)行的流程,和調(diào)用的腳本等詳細(xì)信息。

logrotate -d <configfile>

verbose 模式

會(huì)真正執(zhí)行操作,打印出詳細(xì)信息。

logrotate -v <configfile>

force 強(qiáng)制執(zhí)行

如果時(shí)間不符合要求,logrotate 也不會(huì)真正執(zhí)行時(shí),如果想要立即執(zhí)行,查看結(jié)果,就使用到了 強(qiáng)制執(zhí)行模式。

logrotate -f <configfile>

添加 crontab 計(jì)劃任務(wù)

執(zhí)行 crontab -e 進(jìn)入 vim 模式,進(jìn)行編輯。

[root@root local]# crontab -e

#每天 23點(diǎn)59分進(jìn)行日志切割
59 23 * * * /usr/sbin/logrotate -s /tmp/logrotate.status /etc/logrotate.d/tomcat

解釋:

59 23 * * * cron表達(dá)式
/usr/sbin/logrotate 啟動(dòng)logrotate
-s /tmp/logrotate.status 保存執(zhí)行狀態(tài)
/etc/logrotate.d/tomcat 定時(shí)任務(wù) ,前提是有 tomcat 文件

tomcat 文件內(nèi)容:

/soft/tomcat/logs/catalina.out{
    minsize 50M
    rotate 20
    compress
    copytruncate
    notifempty
}

crontab 常用命令

查看所有的定時(shí)任務(wù) crontab -l

[root@root local]# crontab -l
.....(省略)
59 23 * * * /usr/sbin/logrotate -f /etc/logrotate_mytime/nginx_rotate
.....(省略)

編輯定時(shí)任務(wù) crontab -e

[root@root local]# crontab -e   # 進(jìn)入vim 模式
.....(省略)
59 23 * * * /usr/sbin/logrotate -f /etc/logrotate_mytime/nginx_rotate
.....(省略)

常見應(yīng)用的 logrotate 配置

/var/log/nginx/*.log {   # 可以指定多個(gè)路徑
    daily                      # 日志輪詢周期,weekly,monthly,yearly
    rotate 30                  # 保存30天數(shù)據(jù),超過的則刪除
    size 100M                 # 超過100M時(shí)分割,單位K,M,G,優(yōu)先級(jí)高于daily
    
    compress                   # 切割后壓縮,也可以為nocompress
    delaycompress              # 切割時(shí)對(duì)上次的日志文件進(jìn)行壓縮
    
    dateext                    # 日志文件切割時(shí)添加日期后綴
    dateformat -%Y-%m-%d
    
    missingok                  # 如果沒有日志文件也不報(bào)錯(cuò)
    notifempty                 # 日志為空時(shí)不進(jìn)行切換,默認(rèn)為ifempty
    create 640 nginx nginx     # 使用該模式創(chuàng)建日志文件
    
    sharedscripts              # 所有的文件切割之后只執(zhí)行一次下面腳本
    postrotate
        if [ -f /run/nginx.pid ]; then
            kill -USR1 `cat /run/nginx.pid`
        fi
    endscript
}

logrotate 默認(rèn)運(yùn)行時(shí)間

logrotate 是基于cron 運(yùn)行的,所以這個(gè)時(shí)間是由 cron 控制的,具體可以查詢 cron 的配置文件/etc/crontab

舊版CentOS 的cron 的配置文件是 /etc/crontab ,新版CentOS 改為 /etc/anacrontab 。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論