Logrotate:每 N 小时运行一次

Logrotate:每 N 小时运行一次

考虑一个生成大量日志的服务器,这些日志使用以下方式归档:日志旋转和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命令就足够了。来自-fman 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

相关内容