logrotate 发送未压缩的日志

logrotate 发送未压缩的日志

logrotate 的手册页有这个示例配置文件:

   # sample logrotate configuration file
   compress

   /var/log/messages {
       rotate 5
       weekly
       postrotate
           /usr/bin/killall -HUP syslogd
       endscript
   }

   "/var/log/httpd/access.log" /var/log/httpd/error.log {
       rotate 5
       mail [email protected]
       size 100k
       sharedscripts
       postrotate
           /usr/bin/killall -HUP httpd
       endscript
   }

   /var/log/news/news.crit {
       monthly
       rotate 2
       olddir /var/log/news/old
       missingok
       postrotate
           kill -HUP ‘cat /var/run/inn.pid‘
       endscript
       nocompress
   }

并对第二组指令解释如下:

下一节定义了 /var/log/httpd/access.log 和 /var/log/httpd/error.log 的参数。只要文件大小超过 100k,就会轮换它们,旧的日志文件会(未压缩)邮寄到[电子邮件保护]经过 5 次轮换后,才会被删除。sharedscripts 表示 postrotate 脚本将只运行一次(在旧日志被压缩后),而不是对每个轮换的日志运行一次。请注意,本节开头第一个文件名周围的双引号允许 logrotate 轮换名称中带有空格的日志。适用正常的 shell 引用规则,支持 '、" 和 \ 字符。

我查看了该配置文件,发现compress顶部有一个指令。因此,我推测该部分的旧日志已经使用 gzip 压缩(error.log.5.gzip、access.log.5.gzip)。它们在通过电子邮件发送之前是否进行了解压缩?有没有办法直接将它们邮寄而不进行解压缩?

答案1

是的,日志在本地文件系统上被压缩,并且在通过电子邮件发送时被解压,尽管它似乎是通过管道而不是文件来执行此操作(如)。它不能在压缩之前通过电子邮件发送它们,正如 Janne Pikkarainen 所建议的那样,因为它正在通过电子邮件发送gunzip /var/log/httpd/error.log.5.gz | mail "/var/log/httpd/access.log /var/log/httpd/error.log" "[email protected]"最不最近的log - 在本例中是 5 天前的。如果您定期(例如每小时)运行 logrotate,它也不会导致电子邮件变得非常大(因为是由size 100k而不是,例如 触发的)。daily

如果您确实希望通过电子邮件收到压缩版本的日志,Dan Pritts 是正确的 - 您需要创建一个可以使用 postrotate(或 prerotate)调用的脚本,而不是使用maillogrotate 本身的功能。您需要将压缩日志作为附件发送,有多种方法可以实现这一点,复杂程度和功能各不相同 - 有关更多信息,请参阅关于在 Stack Overflow 上通过命令行发送附件的问题

相关内容