Nginx:日志切割

我們知道突想,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ì)上是完全一樣的典格。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末岛宦,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子耍缴,更是在濱河造成了極大的恐慌砾肺,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件防嗡,死亡現(xiàn)場離奇詭異变汪,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蚁趁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門疫衩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人荣德,你說我怎么就攤上這事闷煤。” “怎么了涮瞻?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵鲤拿,是天一觀的道長。 經(jīng)常有香客問我署咽,道長近顷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任宁否,我火速辦了婚禮窒升,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘慕匠。我一直安慰自己饱须,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布台谊。 她就那樣靜靜地躺著蓉媳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪锅铅。 梳的紋絲不亂的頭發(fā)上酪呻,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音盐须,去河邊找鬼玩荠。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的阶冈。 我是一名探鬼主播屉凯,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼眼溶!你這毒婦竟也來了悠砚?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤堂飞,失蹤者是張志新(化名)和其女友劉穎灌旧,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體绰筛,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡枢泰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了铝噩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片衡蚂。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖骏庸,靈堂內(nèi)的尸體忽然破棺而出毛甲,到底是詐尸還是另有隱情,我是刑警寧澤具被,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布玻募,位于F島的核電站,受9級(jí)特大地震影響一姿,放射性物質(zhì)發(fā)生泄漏七咧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一叮叹、第九天 我趴在偏房一處隱蔽的房頂上張望艾栋。 院中可真熱鬧,春花似錦蛉顽、人聲如沸蝗砾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽遥诉。三九已至,卻和暖如春噪叙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背霉翔。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來泰國打工睁蕾, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓子眶,卻偏偏與公主長得像瀑凝,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子臭杰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容