Logrotate 在压缩文件名末尾附加“1”

Logrotate 在压缩文件名末尾附加“1”

我有一个脚本,每 30 分钟运行一次cronjob并获取mysqldump一些表。转储文件存储/var/log/

/var/log/mysqldump/dbname/tablename/2014-06-15-18-30-dbname-tablename.sql
/var/log/mysqldump/dbname2/tablename2/2014-06-15-19-00-dbname2-tablename2.sql

我正在使用logrotate文件轮换,配置文件具有以下结构:

/var/log/mysqldump/dbname/tablename/*.sql {
  daily
  rotate 30
  compress
  nocreate
}

现在我的问题是,虽然logrotate工作正常,但它在 gzip 压缩文件名末尾附加了“1”或“2”,例如这是我所拥有的

/var/log/mysqldump/dbname2/tablename2/2014-06-15-19-30-dbname2-tablename2.sql.1.gz
/var/log/mysqldump/dbname1/tablename1/2014-06-15-19-00-dbname1-tablename1.sql.2.gz

logrotate在脚本中执行如下

logrotate -f /path/to/mysqldump-logrotate.conf

我在这里做错了什么?

答案1

Logrotate 默认会为文件添加一个数字。这样,如果将其用作文件名,例如,则/var/log/messages轮换的日志将被命名/var/log/messages.0/var/log/messages.1

你的情况有些不同,因为你的文件名中已经有了时间戳,所以扩展名是不必要的。Logrotate 没有不使用扩展名的选项 - 但你可以使用一种解决方法。

使用数字序列的替代方法是使用日期/时间戳。默认为-%Y%m%D,例如-20140618。但您可以配置字符串的外观 - 在您的情况下,它将是一个空字符串。您可以使用以下配置执行此操作:

dateext          # to use dateformat string instead of sequential numbers
dateformat ''    # to use an empty string as the dateext

答案2

你没有做错任何事,这是默认和预期的行为。如果你想要不同的扩展名,例如日期,那么你可以指定dateext

dateext 存档旧版本的日志文件,添加每日扩展名(如 YYYYMMDD),而不是简单地添加数字。可以使用 dateformat 选项配置扩展名。

从上面您还可以看到预计的默认行为是simply adding a number

答案3

您的配置中有此选项rotate 30,这意味着在删除之前会保留 30 个旧版本。此数字是 logrotate 区分版本的方式。因此,实际上您没有做错任何事,程序的行为与设计一致。

答案4

正如您所描述的,这是 logrotate 的正常行为。

通常,您不希望通过脚本而是通过 cronjob 来轮转日志文件。

对于通过 logrotate 对文件进行 gzip 压缩,您不能包含日期,而是让 logrotate 处理 dateext。

因此,对于您的问题的“解决方案”,您可以使用 logrotate 选项

dateext 

并跳过将日期写入文件名的环节。

这将“删除”您在文件名中看到的 1。

相关内容