考虑一个生成大量日志的服务器,这些日志使用以下方式归档:日志旋转和bz2:
"/var/log/uwsgi/*/*.log" {
copytruncate
daily
rotate 14
compress
delaycompress
missingok
notifempty
compresscmd /bin/bzip2
uncompresscmd /bin/bunzip2
compressext .bz2
}
使用hourly
旋转不便于实时检查日志(问题往往发生在小时变化时),并且daily
旋转经常会导致磁盘满。
有没有办法将 logrotate 设置为每隔给定的小时数运行一次?对于我的情况来说,每 6 小时调用一次是完美的。
答案1
在 cronjob 中运行该logrotate
命令就足够了。来自-f
man logrotate
:
-f, --force
Tells logrotate to force the rotation, even if it doesn't think
this is necessary. Sometimes this is useful after adding new
entries to a logrotate config file, or if old log files have
been removed by hand, as the new files will be created, and
logging will continue correctly.
因此编辑/etc/crontab
并添加:
30 */6 * * * root logrotate -f /etc/logrotate.conf
更改分钟以满足您的需要。这*/6
意味着它应该每六个小时运行一次。
这将旋转所有日志文件,因此将应用程序的设置隔离到(自包含的)配置文件中,然后将其用作参数。例如,创建/etc/logrotate.d/uwsgi
包含以下内容的:
"/var/log/uwsgi/*/*.log" {
copytruncate
daily
rotate 14
compress
delaycompress
missingok
notifempty
compresscmd /bin/bzip2
uncompresscmd /bin/bunzip2
compressext .bz2
}
以及/etc/logrotate.conf
您可能隐式依赖的任何其他行。然后crontab
条目将如下所示:
30 */6 * * * root logrotate -f /etc/logrotate.d/uwsgi