我正在尝试配置logrotate
每天午夜轮换和删除日志文件,但之前从未使用过。因此:(a) 我想确认我的配置是否正确,(b) 我需要帮助让它每天午夜自动执行。
我的软件在 时生成一个大型日志文件/abs/path/to/log/myapp-log.txt
。以下是我希望发生的情况:
- 每个日志文件都带有时间戳,并在其名称中添加日期扩展名
/abs/path/to/log/
任何时间点都只能有一个日志文件;因此每次轮换日志并创建新的日志文件时,都会删除旧文件
logrotate.conf
:
/abs/path/to/log/myapp-log.txt {
daily
copytruncate
create 700 myUser myGroup
dateext
maxage 1
missingok
}
这里有几件事我不确定:
daily
如果我指定1,是否需要指定maxage
?- 它到底在
missingok
做什么?如果没有日志文件,是否会忽略系统警告?如果我没有指定missingok
并且日志文件不存在,会发生什么? copytruncate
如果我指定daily
/ ,我是否还需要它maxage 1
?这三个设置感觉有点多余,但不确定每个设置起什么作用。
其次,我如何确保它每天午夜运行?Cron?我之所以问这个问题,是因为我在某处读到过它/etc/cron.daily/logrotate
每天自动运行,但不确定如何配置。提前致谢。
答案1
如果我指定最大值为 1,是否需要指定每日?
是的,你需要日常的您希望此部分每天执行。这控制了该部分的执行频率,而马萨吉控制轮换文件的保存时间。它们是两个不同的东西。
missingok 到底在做什么?
missok表示如果不存在要轮换的日志文件,logrotate 将不会发出抱怨/生成错误。如果未指定此项,并且缺少要轮换的日志文件,logrotate 将生成错误日志。
如果我指定 daily/maxage 1,我是否还需要 copytruncate?
如果复制截断正在为您工作,不要更改它。它适用于原始日志文件
copytruncate 指示 logrotate 创建原始文件的副本(即旋转原始日志文件)并将原始文件截断为零字节大小。这有助于属于该日志文件的相应服务可以写入正确的文件。
在午夜运行 logrotate
有两种方法可以做到这一点。
方法 1- 更改每日 cron 的运行时间
查找以下行/etc/crontab
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
改变二十五 6(即早上 6:25),0 0.这也改变了全部每日 cron 任务的开始时间到午夜。
方法 2- 使用自定义 crontab 行
将 logrotate 从默认的每日 cron 计划中移出
mv /etc/cron.daily/logrotate /etc/logrotate.cronjob
创建自定义 cron 作业。将以下行添加到/etc/crontab
0 0 * * * root /etc/logrotate.cronjob