一般來說,日志是任何故障排除過程中非常重要的一部分,但這些日志會随着時間增長。在這種情況下,我們需要手動執行日志清理以回收空間,這是一件繁瑣的管理任務。為了解決這個問題,我們可以在 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 --> 壓縮日志檔案的所有非目前版本</code>
<code>daily,weekly,monthly --> 按指定計劃輪換日志檔案</code>
<code>delaycompress --> 壓縮所有版本,除了目前和下一個最近的</code>
<code>endscript --> 标記 prerotate 或 postrotate 腳本的結束</code>
<code>errors "emailid" --> 給指定郵箱發送錯誤通知</code>
<code>missingok --> 如果日志檔案丢失,不要顯示錯誤</code>
<code>notifempty --> 如果日志檔案為空,則不輪換日志檔案</code>
<code>olddir "dir" --> 指定日志檔案的舊版本放在 “dir” 中</code>
<code>postrotate --> 引入一個在日志被輪換後執行的腳本</code>
<code>prerotate --> 引入一個在日志被輪換前執行的腳本</code>
<code>rotate 'n' --> 在輪換方案中包含日志的 n 個版本</code>
<code>sharedscripts --> 對于整個日志組隻運作一次腳本</code>
<code>size='logsize' --> 在日志大小大于 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中國”