Logrotate

在每日輪換中記錄提前日期

  • April 20, 2015

我已經設置了一個 logrotate 配置文件,如下所示:

/var/log/tomcat/catalina.out{
copytruncate
daily
dateext
rotate 10
missingok
notifempty
}

在我的 /sysconfig/cron 設置文件中,我設置DAILY_TIME="00:00" 了它輪換日誌,但如果日誌的日期catalina.out-20150415包含從日期 20150414 開始的日誌資訊,則這是前一天。

我應該更改 /sysconfig/cron 文件中的日期,還是可以使用 prerotate/endscript 選項來實現這一點?

據我所知,DAILY_TIME 工作間隔為 15 分鐘,我希望擁有盡可能完美的每日日誌,其中僅包含一天的資訊。我現在得到的是什麼,但文件名稱中的日期與其中的內容不符。

注意:我在 SLES 下,每天的 cron 作業與其他發行版有點不同。

除了在午夜設置每日 cronjobs 之外,我不會玩 /sysconfig/cron,而是更喜歡 postrotate。

假設今天是 17/04/2015,這是您的目錄在旋轉之後但在 postrotate 腳本執行之前的內容:

catalina.out-20150414
catalina.out-20150415
catalina.out-20150417
catalina.out

請注意,catalina.out-20150416缺少 1) 輪換創建的最後一個日誌文件已命名catalina.out-20150417,以及 2) 昨天創建的日誌已重命名為catalina.out-20150415以反映其內容。

這種情況允許我們使用昨天的日期對今天的日誌進行“盲目重命名”,例如:

...
postrotate
   mv "catalina.out-$(date +"%Y%m%d")" "catalina.out-$(date --date="yesterday" +"%Y%m%d")" > /dev/null 2>&1 || true
endscript
...

如果失去日誌文件,mv將引發錯誤消息,該消息被重定向到/dev/null,並通過以下方式確保返回正值|| true

引用自:https://serverfault.com/questions/684009