2012-03-04 38 views
25

我需要設置logrotate來從運行在服務器上的應用程序中旋轉日誌文件。 我需要文件名中的日期。如何使用logrotate在文件名中插入日期

我設置了dateext和dateformat來在日期中添加一個 - 。 結果文件名是:whatever.csv_2012-03-03

我希望時間戳是文件名的一部分,以確保擴展的安全; Whatever_2012-03-03.csv。

# Daily rotation 
    daily 

# We keep original file live 
    copytruncate 

# Rotation is 1 so we have always .1 as extension 
    rotate 1 

# If file is missing keep working 
    missingok 

    sharedscripts 
    postrotate 
      day=$(date +%Y-%m-%d) 
      mv blabla.csv.1 /var/www/gamelogs/dir/blabla$day.csv 
    endscript 
} 

這是簡單而正常工作:

回答

20

要在旋轉文件是正確使用插入Linux下一個文件的文件名(而不是作爲擴展名)中的日期。

+0

我喜歡這個解決方案。如果我理解正確,它有一個副作用:logrotate不再限制保存文件的數量。如果有意的話,那很好。 – Marian 2014-07-08 06:59:17

+0

很容易在你的postrotate腳本中添加一個'find $ logdir -mtime + $ maxage -delete'語句。 – Rob 2014-08-07 09:07:06

+1

@Rob,那麼,實際使用logrotate有什麼意義呢? – cnst 2014-09-15 20:27:53

56

你應該能夠保持延長分開,例如, whatever.2012-03-03.csv,具有以下配置:

whatever.csv { 
    dateext 
    dateformat .%Y-%m-%d 
    extension .csv 
    ... 
} 

注意dateext是故意空。

+0

我試過這個,但每次旋轉都添加日期,所以我得到'file.log','file.2014-01-08.log'和'file.2014-01-07.2014-01-08。日誌「等。 – fadedbee 2014-01-08 17:26:45

+1

我發現'extension'應該有'.',所以正確的形式是'extension .csv'。這也在'compressext'中跟在'compressext .bz2'之後。 – ADTC 2014-01-24 03:12:37

+3

另外,它應該是'dateformat。%Y-%m-%d'(第一個點是日期,第二個是擴展)。 @ chrisdew可能是因爲你使用的是通配符,所以* logrotate *試圖旋轉'file.log'和'file.2014-01-07.log'。要麼使用固定名稱,要麼使用'olddir'選項將旋轉的文件移動到不同的目錄,以免被通配符拾取。 – ADTC 2014-01-24 03:27:07

相關問題