2014-10-31 77 views
1

我們有我們的應用程序服務器(tomcat)創建catalina.log,我們需要編寫一個cron作業(bash腳本)來運行每個小時並使用時間戳來輪換日誌文件。使用bash腳本在linux/solaris上進行日誌輪換

目前我們正在通過以下方式進行此操作。

  1. 將catalina.out複製到catalina.out。
  2. 空catalina.out的

我們的問題是,如果有什麼在這個過程中寫入catalina.out的,那就是走了清空catalina.out的過程中丟失。 有沒有辦法解決這個問題?

在此先感謝 Mayuran

+0

爲什麼不使用「logrotate」命令?它做你想要的。 – 2014-10-31 17:16:32

+0

或者可以試試這個。在您的bash腳本中,不是複製文件(可能需要幾微秒/秒),而是使用mv命令將catalina.out移動到catalina.out。<$ time variable here> && touch catalina.out – 2014-10-31 17:20:01

回答

1

雖然你或許應該使用的logrotate命令來管理你的日誌輪換,這個建議並沒有直接回答你的問題。

我看到你遇到了兩個問題。首先你聲明:

  1. 將catalina.out複製到catalina.out。

這看起來不正確。也許它是一個錯字?你爲什麼要將文件複製到自己?其次,你不應該複製這些(可能很大)的文件。所有你需要做的就是重命名它們。所以,一個人可憐的日誌旋轉(同樣,你應該使用logrotate的)會是這樣的:

FILE=catalina.out 
TIME=`date -u +%s` 
if [ -e $FILE ] ; then 
    mv ${FILE} ${FILE}.${TIME} && touch ${FILE} 
else 
    touch ${FILE} 
fi 

這當然會,填補了catalina.out的磁盤*文件最後。你需要增強腳本來處理這個問題,或者只是使用logrotate。