天天看點

『學了就忘』Linux日志管理 — 93、日志輪替補充

目錄

1、把自己的日志加入日志輪替

(1)操作方式

(2)示例

2、logrotate指令

使用RPM包方式安裝服務的日志會自動的加入<code>logrotate</code>輪替,一般不需要你介入。

而使用源碼包方式安裝服務的日志,需要手工把該服務的日志加入到<code>logrotate.conf</code>配置檔案中。

是以源碼包方式安裝服務的日志和手動指定的日志,是需要自己手動加入<code>logrotate</code>日志輪替。

有兩個方法:

第一種方法是直接在<code>/etc/logrotate.conf</code>配置檔案中寫入該日志的輪替政策,進而把日志加入<code>logrotate</code>輪替。

第二種方法是在<code>/etc/logrotate.d/</code>目錄中建立立該日志的輪替檔案,在該輪替檔案中寫入正确的輪替政策,因為該目錄中的檔案都會被<code>"include"</code>到主配置檔案中,是以也可以把日志加入輪替。

推薦第二種方法,因為系統中需要輪替的日志非常多,如果全都直接寫入<code>/etc/logrotate.conf</code>配置檔案,那麼這個檔案的可管理性就會非常差,不利于此檔案的維護。

我們在<code>/var/log/</code>目錄中建立要給<code>testerr.log</code>日志檔案,這個日志不是系統預設日志,是以預設這個日志是不會輪替的,那麼我們需要把這個日志加入日志輪替的政策。

拓展: 有個典型應用就是給予特定的日志加入<code>chattr</code>的<code>a</code>屬性,如果系統檔案加入了<code>a</code>屬性,那麼這個檔案就隻能增加資料,但是不能删除和修改已有的資料了,而且<code>root</code>使用者也不能例外。 是以我們會給重要的日志檔案加入<code>a</code>屬性,這樣的話可以保護日志檔案不被惡意修改。不過一旦加入了<code>a</code>屬性,那麼日志輪替時,這個日志檔案是不能被改名的,當然也就不能進行日志輪替了。是以我們可以利用<code>prerotate</code>和<code>postrotate</code>來修改日志檔案的<code>chattr</code>的<code>a</code>屬性。在下一個小節,我們會具體說明下這兩個參數的使用。

采用第二種方式實作,如下:

練習2:把Nginx服務的日志加入日志輪替,需要重新開機Nginx服務。

實際工作中就可以以此為例。

提示:Linux系統自身日志或者使用RPM包方式安裝服務的日志,需要重新開機。

我們日志輪替之是以可以在指定的時間備份日志,其實也要依賴系統定時任務。如果大家還記得<code>/etc/cron.daily/</code>目錄,就會發現這個目錄中是有<code>logrotate</code>檔案,<code>logrotate</code>指令通過這個檔案依賴定時任務執行的。

<code>logrotate</code>指令的格式:

注意:<code>logrotate</code>指令一般不需要我們執行,需要強制輪替的時候才需要執行。

我們執行<code>logrotate</code>指令,并檢視下執行過程:

我們發現<code>/var/log/testerr.log</code>加入了日志輪替,已經被<code>logrotate</code>識别并調用了。隻是時間沒有達到輪替的标準,是以沒有進行輪替。

那我們強制進行一次日志輪替,看看有什麼結果:

我們發現<code>testerr.log</code>日志已經完成了日志輪替。

我們檢視下新産生的日志和舊日志:

<code>logrotate</code>指令使用<code>“-f"</code>選項之後,就不管日志是否已經符合了日志輪替條件,而強制把所有的日志都進行了輪替。