2012-03-04 199 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