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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

切割nginx日志

發(fā)布時(shí)間:2024/4/13 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 切割nginx日志 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

這幾天自己看了下博客的nginx日志,發(fā)現(xiàn)日志文件發(fā)現(xiàn)越來(lái)越大。

因?yàn)閚ginx自己不會(huì)對(duì)日志文件進(jìn)行切割,所以打算通過(guò)其他方式進(jìn)行切割,而且為了后續(xù)能對(duì)nginx日志文件里面記錄的數(shù)據(jù)進(jìn)行分析,所以打算按照天對(duì)其進(jìn)行切割。

PS:本篇文章所以的操作是在centos6.5 OS 64bit上進(jìn)行。

切割nginx日志,我們可以通過(guò)兩種不同的方式進(jìn)行,分別是:通過(guò)logrotate和通過(guò)shell腳本。

如果是yum方式安裝的nginx,系統(tǒng)默認(rèn)會(huì)自動(dòng)通過(guò)logrotate這個(gè)日志管理軟件,按天進(jìn)行分割。但是經(jīng)過(guò)多次測(cè)試發(fā)現(xiàn)logrotate切割日志不會(huì)按照自己設(shè)置的時(shí)間點(diǎn)進(jìn)行分割,這點(diǎn)有點(diǎn)失望。

所以無(wú)論是yum方式安裝,還是源碼方式安裝,都建議使用shell腳本方式進(jìn)行切割日志。

為了更深入的學(xué)習(xí)linux系統(tǒng),在此也會(huì)介紹下logrotate相關(guān)的知識(shí)點(diǎn)。

下面分別對(duì)這兩種方法進(jìn)行介紹下:

一、使用logrotate切割

前面說(shuō)了yum或者apt-get方式安裝的nginx會(huì)自動(dòng)使用logrotate這個(gè)日志管理軟件進(jìn)行切割,所以本章節(jié)我們主要介紹有關(guān)logrotate相關(guān)的知識(shí)點(diǎn)。

1.1 logrotate介紹

logrotate是什么呢?它是一個(gè)linux系統(tǒng)日志的管理工具。它可以切割、壓縮等其他軟件的日志文件軟件。

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

我們可以通過(guò)如下命令安裝logrotate,如下:

yum -y install logrotate

如果是ubuntu系統(tǒng),可以使用如下命令進(jìn)行安裝:

apt-get -y install logrotate

查看logrotate的配置文件,使用如下命令:

rpm -ql logrotate

通過(guò)上圖,我們可以很明顯的看到logrotate的配置文件是/etc/logrotate.conf,而/etc/logrotate.d/是用于存儲(chǔ)其他配置文件的目錄。該目錄里的所有文件都會(huì)被主動(dòng)的讀入 /etc/logrotate.conf中執(zhí)行。

1.2 logrotate配置文件詳解

logrotate配置選項(xiàng)相對(duì)來(lái)說(shuō)比較少,為了切合本篇文章,在此我們以切割nginx的配置文件為例,如下:

cat /etc/logrotate.d/nginx

/var/log/nginx/*.log {

daily

missingok

rotate 7

dateext

# compress

delaycompress

notifempty

create 640 nginx adm

sharedscripts

postrotate

[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`

endscript

}

在該配置文件中,每個(gè)參數(shù)作用如下:

/var/log/nginx/為nginx日志的存儲(chǔ)目錄,可以根據(jù)實(shí)際情況進(jìn)行修改。

daily:日志文件將按天輪循。

weekly:日志文件將按周輪循。

monthly:日志文件將按月輪循。

missingok:在日志輪循期間,任何錯(cuò)誤將被忽略,例如“文件無(wú)法找到”之類的錯(cuò)誤。

rotate 7:一次存儲(chǔ)7個(gè)日志文件。對(duì)于第8個(gè)日志文件,時(shí)間最久的那個(gè)日志文件將被刪除。

dateext:定義日志文件后綴是日期格式,也就是切割后文件是:xxx.log-20160402.gz這樣的格式。如果該參數(shù)被注釋掉,切割出來(lái)是按數(shù)字遞增,即前面說(shuō)的 xxx.log-1這種格式。

compress:在輪循任務(wù)完成后,已輪循的歸檔將使用gzip進(jìn)行壓縮。

delaycompress:總是與compress選項(xiàng)一起用,delaycompress選項(xiàng)指示logrotate不要將最近的歸檔壓縮,壓縮將在下一次輪循周期進(jìn)行。這在你或任何軟件仍然需要讀取最新歸檔時(shí)很有用。

notifempty:如果是空文件的話,不進(jìn)行轉(zhuǎn)儲(chǔ)。

create 640 nginx adm:以指定的權(quán)限和用書(shū)屬性,創(chuàng)建全新的日志文件,同時(shí)logrotate也會(huì)重命名原始日志文件。

postrotate/endscript:在所有其它指令完成后,postrotate和endscript里面指定的命令將被執(zhí)行。在這種情況下,rsyslogd進(jìn)程將立即再次讀取其配置并繼續(xù)運(yùn)行。注意:這兩個(gè)關(guān)鍵字必須單獨(dú)成行。

1.3?查看logrotate默認(rèn)執(zhí)行時(shí)間

logrotate切割時(shí)間默認(rèn)是在每天的3:22。這個(gè)時(shí)間點(diǎn)可以通過(guò)crontab配置文件查看到。如下:

cat /etc/anacrontab

SHELL=/bin/sh

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

MAILTO=root

# the maximal random delay added to the base delay of the jobs

RANDOM_DELAY=45

# the jobs will be started during the following hours only

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

其中START_HOURS_RANGE參數(shù)就是配置logrotate切割的時(shí)間點(diǎn)。

如果你想在指定時(shí)間點(diǎn),讓logrotate切割日志的話,可以修改此配置文件的START_HOURS_RANGE參數(shù)。

但是經(jīng)過(guò)多次實(shí)驗(yàn),我發(fā)現(xiàn)logrotate沒(méi)有按照我指定的時(shí)間進(jìn)行切割日志。

所以最后我還是選擇了使用shell腳本來(lái)切割nginx日志。

二、使用shell腳本切割

使用shell腳本切割nginx日志很簡(jiǎn)單,shell腳本內(nèi)容如下:

vim /usr/local/cut_del_logs.sh

#!/bin/bash

#初始化

LOGS_PATH=/var/log/nginx

YESTERDAY=$(date -d “yesterday” +%Y%m%d)

#按天切割日志

mv ${LOGS_PATH}/ilanni.com.log ${LOGS_PATH}/ilanni.com_${YESTERDAY}.log

#向nginx主進(jìn)程發(fā)送USR1信號(hào),重新打開(kāi)日志文件,否則會(huì)繼續(xù)往mv后的文件寫(xiě)數(shù)據(jù)的。原因在于:linux系統(tǒng)中,內(nèi)核是根據(jù)文件描述符來(lái)找文件的。如果不這樣操作導(dǎo)致日志切割失敗。

kill -USR1 `ps axu | grep “nginx: master process” | grep -v grep | awk ‘{print $2}’`

#刪除7天前的日志

cd ${LOGS_PATH}

find . -mtime +7 -name “*20[1-9][3-9]*” | xargs rm -f

#或者

#find . -mtime +7 -name “ilanni.com_*” | xargs rm -f

exit 0

該shell腳本有兩個(gè)功能,第一個(gè)是切割nginx日志,第二個(gè)是刪除7天之前的nginx日志。

在切割nginx日志的功能中,我們要注意該shell腳本命名切割的日志是以切割時(shí),是以前一天的時(shí)間就行命名該日志文件的。

所以我們?cè)诎言搒hell腳本放在crontab中執(zhí)行時(shí),建議在每天的0點(diǎn)0分執(zhí)行。如下:

vim /etc/crontab

0 0 * * * root /bin/sh /usr/local/cut_del_logs.sh

查看nginx切割的日志文件,如下:

ll –full-time /var/log/nginx/

通過(guò)上圖,我們可以很明顯的看到,切割shell腳本確實(shí)按照我們?cè)O(shè)想的進(jìn)行切割和命名切割日志文件的。

總結(jié)

以上是生活随笔為你收集整理的切割nginx日志的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。