我有一个脚本,每 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。