Logrotate
在每日輪換中記錄提前日期
我已經設置了一個 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