logrotate的手册页有这个示例configuration文件:
# 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次旋转后被邮寄(未压缩)到[email protected],而不是被移除。 sharedscripts意味着postrotate脚本将只运行一次(在旧日志被压缩之后),而不是每个被旋转的日志都运行一次。 请注意,本节开头的第一个文件名的双引号允许logrotate在名称中用空格旋转日志。 普通shell引用规则适用,支持“,”和\字符。
我看着那个configuration文件,看到顶部有一个compress指令。 因此,我认为该部分的旧日志已经被gzip(error.log.5.gzip,access.log.5.gzip)压缩了。 在通过电子邮件发送之前,他们是否被解压? 有没有办法让他们邮寄没有减压?
日志是在本地文件系统上压缩的,是的,在通过电子邮件发送的时候它们被解压缩,尽pipe它似乎是用pipe道而不是文件来做的(如gunzip /var/log/httpd/error.log.5.gz | mail "/var/log/httpd/access.log /var/log/httpd/error.log" "[email protected]" )。 正如Janne Pikkarainen所build议的那样,它不能通过电子邮件发送给他们,因为它是通过电子邮件发送最近的日志 – 在这种情况下是5天。 它也不会导致疯狂的巨大的电子邮件(感谢由size 100k而不是daily触发),假设你经常运行logrotate – 例如,每小时。
如果你真的想要压缩版本的日志通过电子邮件发送给你,Dan Pritts是正确的 – 你需要创build一个脚本,你可以使用postrotate(或prerotate)调用,而不是使用logrotate自身的mailfunction。 你会发送压缩的日志作为附件,有很多方法可以解决这个问题,具有不同程度的复杂性和function – 更多,看到这个问题有关通过命令行发送堆栈溢出附件 。