我們知道突想,nginx會(huì)將訪問日志寫入到access.log日志文件中,天長日久究抓,access.log文件就會(huì)越來越大猾担,如果訪問量巨大,并不用多長時(shí)間刺下,access.log文件的體積就會(huì)變得非常大绑嘹,對(duì)于我們的管理工作來說,這是不利的橘茉,首先工腋,當(dāng)我們打開一個(gè)非常大的日志文件時(shí),就會(huì)比較慢畅卓,而且擅腰,從一個(gè)非常大的日志中找到某個(gè)時(shí)間段的日志也會(huì)比較慢,所以翁潘,我們最好將日志按天分割開(或者按照你覺得合適的時(shí)間段分隔開)趁冈,比如,每天晚上0點(diǎn)5分生成一個(gè)新的日志文件拜马,0點(diǎn)5分之后(新的一天)的日志寫入到新的日志文件中渗勘,之前的日志則保留在老的文件中,這樣每天就會(huì)生成一個(gè)日志文件俩莽,而不是將所有日志都寫入到同一個(gè)日志文件中旺坠。
所以,我們需要為nginx配置"日志分割"的功能豹绪,或者稱之為"日志滾動(dòng)"的功能价淌,說到nginx的日志切割,要分如下兩種情況來說:
一瞒津、通過編譯的方式安裝nginx后蝉衣,默認(rèn)沒有日志分割的功能。
二巷蚪、通過yum源的方式安裝nginx后病毡,默認(rèn)會(huì)對(duì)nginx日志進(jìn)行切割。
也就是說屁柏,當(dāng)安裝完nginx以后啦膜,默認(rèn)是否存在日志滾動(dòng)的功能有送,取決于你的安裝方式,看完這篇文章你就會(huì)理解為什么會(huì)出現(xiàn)這種情況僧家。
為nginx實(shí)現(xiàn)日志切割的方法通常有兩種雀摘,第一種方法是編寫腳本實(shí)現(xiàn)日志切割,第二種方法是使用系統(tǒng)自帶的日志滾動(dòng)軟件"logrotate"完成日志切割八拱,但是無論選擇哪種方法阵赠,其實(shí)都是殊途同歸,在本質(zhì)上都是一樣的肌稻,那么清蚀,我們先來看看怎樣通過最"原始"的方法為nginx進(jìn)行日志滾動(dòng)。
在之前的文章中爹谭,我們已經(jīng)了解到枷邪,通過"nginx -s"命令可以向nginx的主進(jìn)程(master進(jìn)程)發(fā)送信號(hào),這些信號(hào)就是quit信號(hào)诺凡、stop信號(hào)东揣、reload信號(hào)以及reopen信號(hào),其實(shí)绑洛,我們借助reopen信號(hào)救斑,就能為nginx實(shí)現(xiàn)日志滾動(dòng)的效果童本,此處先演示手動(dòng)實(shí)現(xiàn)日志滾動(dòng)的操作真屯,手動(dòng)操作步驟如下:
一、進(jìn)入日志目錄 cd /var/log/nginx 二穷娱、重命名日志文件 此處绑蔫,假設(shè)當(dāng)前時(shí)間為2019年2月12日凌晨0點(diǎn)5分,我想要在這個(gè)時(shí)間點(diǎn)切割日志泵额,所謂的"切割"配深,并不是真的把一個(gè)文件"切成兩個(gè)",只是把原來的"access.log"文件重命名嫁盲,比如重命名為昨天的日期"access.log-20190211"篓叶,然后再創(chuàng)建一個(gè)名為"access.log"的新文件,以便新生成的日志仍然可以寫入到名為"access.log"的新文件中羞秤,這樣就能實(shí)現(xiàn)所謂的"日志滾動(dòng)"或者"日志切割"的效果了缸托。 但是,這樣做會(huì)遇到一些問題瘾蛋,我們來手動(dòng)操作一下俐镐,首先,重命名文件 # mv access.log access.log-20190211 我們已經(jīng)重命名了"access.log"文件哺哼,但是你會(huì)發(fā)現(xiàn)佩抹,重命名后叼风,nginx日志仍然會(huì)寫入到"access.log-20190211"文件中,并不會(huì)自動(dòng)創(chuàng)建一個(gè)新的"access.log"文件棍苹,即使你手動(dòng)創(chuàng)建了一個(gè)新的"access.log"文件无宿,nginx仍然會(huì)把日志寫入到重命名后的"access.log-20190211"文件中。 出現(xiàn)上述情況枢里,是因?yàn)閚ginx進(jìn)程讀寫日志文件時(shí)懈贺,是通過文件描述符去操作的,雖然我們修改了原"access.log"文件的文件名坡垫,但是原文件描述符與文件本身的對(duì)應(yīng)關(guān)系仍然存在梭灿,所以,單單對(duì)文件重命名是不夠的冰悠,我們需要讓nginx重新打開一個(gè)新文件堡妒,以便將新的日志寫入到新文件中。 三溉卓、發(fā)送信號(hào) 此刻皮迟,就需要用到我們剛才提到的reopen信號(hào)了,我們需要向nginx主進(jìn)程發(fā)送一個(gè)reopen信號(hào)桑寨,以便nginx能夠打開一個(gè)新的日志文件伏尼,具體命令如下: # nginx -s reopen 執(zhí)行完上述命令后,你會(huì)發(fā)現(xiàn)日志目錄中自動(dòng)生成了一個(gè)新的"access.log"文件尉尾,再次訪問nginx爆阶,會(huì)發(fā)現(xiàn)新生成的日志已經(jīng)寫入到了新生成的"access.log"文件中了。
如果每天0點(diǎn)5分的時(shí)候都執(zhí)行一遍上述操作沙咏,就能夠?qū)崿F(xiàn)每天日志自動(dòng)滾動(dòng)的效果了辨图,當(dāng)然,我們需要編寫一個(gè)腳本肢藐,將上述過程自動(dòng)化故河,然后定時(shí)執(zhí)行腳本即可,其實(shí)上述過程非常簡單吆豹,說白了就是重命名日志文件鱼的,發(fā)送信號(hào),生成新的日志文件痘煤。
其實(shí)凑阶,除了能夠使用"nginx -s"命令發(fā)送信號(hào),我們也可以借助"kill"命令向nginx進(jìn)程發(fā)送信號(hào)速勇,你肯定經(jīng)常使用kill命令晌砾,當(dāng)你想要強(qiáng)制停掉進(jìn)程的時(shí)候,會(huì)使用"kill -9 pid"向進(jìn)程發(fā)送"SIGKILL"信號(hào)烦磁,除了"-9"代表的"SIGKILL"信號(hào)养匈,我們也可以借助kill命令向進(jìn)程發(fā)送一些別的信號(hào)哼勇,kill命令并不是此處討論的重點(diǎn),而是我們需要借助kill命令呕乎,向nginx主進(jìn)程發(fā)送一個(gè)名為"USR1"的信號(hào)积担,在程序中,"USR1"信號(hào)的作用是可以自定義的猬仁,也就是說帝璧,當(dāng)程序捕捉到"USR1"信號(hào)的時(shí)候進(jìn)行什么操作,取決于編程時(shí)的設(shè)定湿刽,不同的程序采取的操作可能不同的烁,而在nginx中,"USR1"信號(hào)可以幫助我們重新打開日志诈闺,換句話說就是渴庆,"nginx -s reopen"命令的作用和"kill -USR1 NginxPid"的作用是一樣的,"NginxPid"指的是nginx的master進(jìn)程的進(jìn)程號(hào)雅镊,所以襟雷,在編寫nginx日志滾動(dòng)腳本時(shí),你可以使用這兩個(gè)命令中的任何一個(gè)仁烹,以便nginx可以重新打開日志文件耸弄。
如果你使用了yum源的方式安裝了nginx,你會(huì)發(fā)現(xiàn)在安裝完nginx后默認(rèn)就有日志滾動(dòng)的功能卓缰,這是因?yàn)橥ㄟ^yum源安裝nginx后计呈,默認(rèn)會(huì)安裝一個(gè)日志滾動(dòng)的配置文件,這個(gè)配置文件就是"/etc/logrotate.d/nginx"僚饭,可以看出震叮,這是一個(gè)logrotate配置文件尺上,也就是說哗伯,nginx借助這個(gè)配置文件铅协,使用logrotate完成了日志分割的操作,通常情況下偿乖,centos系統(tǒng)默認(rèn)自帶logrotate,logrotate是一個(gè)日志管理工具哲嘲,此處討論的重點(diǎn)也不是logrotate贪薪,重點(diǎn)是nginx怎樣通過logrotate完成日志滾動(dòng)的,所以眠副,打開"/etc/logrotate.d/nginx"配置文件画切,你會(huì)從中找到如下一行命令
kill -USR1 `cat /var/run/nginx.pid` 看到此處你一定明白了,無論是我們自己編寫腳本囱怕,還是通過別的什么方式霍弹,其實(shí)本質(zhì)上都是在向nginx進(jìn)程發(fā)送信號(hào)毫别,只是實(shí)現(xiàn)的方法不同,本質(zhì)上是完全一樣的典格。
Nginx:日志切割
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門疫衩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人荣德,你說我怎么就攤上這事闷煤。” “怎么了涮瞻?”我有些...
- 文/不壞的土叔 我叫張陵鲤拿,是天一觀的道長。 經(jīng)常有香客問我署咽,道長近顷,這世上最難降的妖魔是什么? 我笑而不...
- 正文 為了忘掉前任宁否,我火速辦了婚禮窒升,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘慕匠。我一直安慰自己饱须,他們只是感情好,可當(dāng)我...
- 文/花漫 我一把揭開白布台谊。 她就那樣靜靜地躺著蓉媳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪锅铅。 梳的紋絲不亂的頭發(fā)上酪呻,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼眼溶!你這毒婦竟也來了悠砚?” 一聲冷哼從身側(cè)響起,我...
- 序言:老撾萬榮一對(duì)情侶失蹤堂飞,失蹤者是張志新(化名)和其女友劉穎灌旧,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體绰筛,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡枢泰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了铝噩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片衡蚂。...
- 正文 年R本政府宣布玻募,位于F島的核電站,受9級(jí)特大地震影響一姿,放射性物質(zhì)發(fā)生泄漏七咧。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一叮叹、第九天 我趴在偏房一處隱蔽的房頂上張望艾栋。 院中可真熱鬧,春花似錦蛉顽、人聲如沸蝗砾。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽遥诉。三九已至,卻和暖如春噪叙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背霉翔。 一陣腳步聲響...
- 正文 我出身青樓子眶,卻偏偏與公主長得像瀑凝,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子臭杰,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- Nginx日志切割 方法1(腳本+定時(shí)執(zhí)行): #step1:加腳本 cut_nginx_log.sh粤咪,主進(jìn)程把U...
- 目錄 一磁奖、Nginx訪問日志二囊拜、Nginx日志切割三、靜態(tài)文件不記錄日志和過期時(shí)間 一比搭、Nginx訪問日志 Ngi...
- 前幾天查看了下nginx的日志文件access.log冠跷,發(fā)現(xiàn)居然有二十幾個(gè)G了! 于是準(zhǔn)備使用Shell腳本的方式...
- #!/bin/bash #原nginx日志存放路徑 log_files_path="/home/wwwlogs/"...
- 前言 在Linux環(huán)境中能夠幫助我們分析問題蛛絲馬跡的有效辦法之一便是日志身诺,常見的如操作系統(tǒng)syslog日志/va...