天天看點

配置 logrotate 的終極指導

一般來說,日志是任何故障排除過程中非常重要的一部分,但這些日志會随着時間增長。在這種情況下,我們需要手動執行日志清理以回收空間,這是一件繁瑣的管理任務。為了解決這個問題,我們可以在 linux 中配置 logrotate 程式,它可以自動執行日志檔案的輪換、壓縮、删除和用郵件發出。

我們可以配置 logrotate 程式,以便每個日志檔案可以在每天、每周、每月或當它變得太大時處理。

<a target="_blank"></a>

預設情況下,logrotate 指令作為放在 <code>/etc/cron.daily</code> 中的 cron 任務,每天運作一次,它會幫助你設定一個政策,其中超過某個時間或大小的日志檔案被輪換。

指令: <code>/usr/sbin/logrotate</code>

配置檔案: <code>/etc/logrotate.conf</code>

這是 logrotate 的主配置檔案。logrotate 還在 <code>/etc/logrotate.d/</code> 中存儲了特定服務的配置。確定下面的那行包含在 <code>/etc/logrotate.conf</code> 中,以讀取特定服務日志配置。

<code>include /etc/logrotate.d`</code>

logrotate 曆史: <code>/var/lib/logrotate.status</code>

重要的 logrotate 選項:

<code>compress --&gt; 壓縮日志檔案的所有非目前版本</code>

<code>daily,weekly,monthly --&gt; 按指定計劃輪換日志檔案</code>

<code>delaycompress --&gt; 壓縮所有版本,除了目前和下一個最近的</code>

<code>endscript --&gt; 标記 prerotate 或 postrotate 腳本的結束</code>

<code>errors "emailid" --&gt; 給指定郵箱發送錯誤通知</code>

<code>missingok --&gt; 如果日志檔案丢失,不要顯示錯誤</code>

<code>notifempty --&gt; 如果日志檔案為空,則不輪換日志檔案</code>

<code>olddir "dir" --&gt; 指定日志檔案的舊版本放在 “dir” 中</code>

<code>postrotate --&gt; 引入一個在日志被輪換後執行的腳本</code>

<code>prerotate --&gt; 引入一個在日志被輪換前執行的腳本</code>

<code>rotate 'n' --&gt; 在輪換方案中包含日志的 n 個版本</code>

<code>sharedscripts --&gt; 對于整個日志組隻運作一次腳本</code>

<code>size='logsize' --&gt; 在日志大小大于 logsize(例如 100k,4m)時輪換</code>

讓我們為我們自己的示例日志檔案 <code>/tmp/sample_output.log</code> 配置 logrotate。

第一步:在 <code>/etc/logrotate.conf</code> 中添加以下行。

<code>/tmp/sample_output.log {</code>

<code>size 1k</code>

<code>create 700 root root</code>

<code>rotate 4</code>

<code>compress</code>

<code>}</code>

在上面的配置檔案中:

size 1k - logrotate 僅在檔案大小等于(或大于)此大小時運作。

create - 輪換原始檔案并建立具有指定權限、使用者群組的新檔案。

rotate - 限制日志檔案輪轉的數量。是以,這将隻保留最近的 4 個輪轉的日志檔案。

compress - 這将壓縮檔案。

第二步:通常,你需要等待一天才能等到 logrotate 由 <code>/etc/cron.daily</code> 執行。除此之外,你可以用下面的指令在指令行中運作:

<code>/usr/sbin/logrotate /etc/logrotate.conf</code>

在執行 logrotate 指令之前的輸出:

<code>[root@rhel1 tmp]# ls -l /tmp/</code>

<code>total 28</code>

<code>-rw-------. 1 root root 20000 jan 1 05:23 sample_output.log</code>

在執行 logrotate 之後的輸出:

<code>[root@rhel1 tmp]# ls -l /tmp</code>

<code>total 12</code>

<code>-rwx------. 1 root root 0 jan 1 05:24 sample_output.log</code>

<code>-rw-------. 1 root root 599 jan 1 05:24 sample_output.log-20170101.gz</code>

<code>[root@rhel1 tmp]#</code>

這樣就能确認 logrotate 成功實作了。

原文釋出時間為:2017-02-22

本文來自雲栖社群合作夥伴“linux中國”

繼續閱讀