在postrotate脚本之后logrotate压缩文件

Tho*_*mas 15 linux compression shell logging logrotate

我有一个应用程序每天生成一个非常重的大日志文件(每天约800MB),因此我需要压缩它们但由于压缩需要时间,我希望logrotate在重新加载/向应用程序发送HUP信号后压缩文件.

/var/log/myapp.log {
    rotate 7
    size 500M
    compress
    weekly
    postrotate
        /bin/kill -HUP `cat /var/run/myapp.pid 2>/dev/null` 2>/dev/null || true
    endscript
}
Run Code Online (Sandbox Code Playgroud)

压缩是否已经发生在postrotate之后(这会违反直觉)?如果没有,任何人都可以告诉我,如果没有额外的命令脚本(一个选项或一些技巧)可以做到这一点吗?

谢谢托马斯

小智 42

这里添加此信息,以防其他人在实际搜索时遇到想要在压缩完成后运行文件的方法时遇到此线程的情况.

如上所述使用postrotate/endscript对此没有好处.

相反,你可以使用lastaction/endscript,它完美地完成了这项工作.


小智 21

postrotate脚本始终运行之前,即使压缩sharedscripts生效.因此,Hasturkun对第一个答案的额外回应是不正确的.当sharedscripts生效的前执行的唯一压缩postrotate是原来的未压缩日志遗落因为周围delaycompress.对于当前日志,运行postrotate脚本始终执行压缩.

  • 如果这是一个评论,我可能会在不到八个月的时间内做出回应 (2认同)

Has*_*kun 15

postrotate不压缩之前运行的脚本发生:从该名男子页日志轮播

配置文件的下一部分定义了如何处理日志文件/ var/log/messages.在删除之前,日志将经历五周轮换.在旋转日志文件之后(但在压缩旧版本的日志之前),将执行命令/ sbin/killall -HUP syslogd.

在任何情况下,您都可以使用该delaycompress选项将压缩延迟到下一次旋转.

  • 那么手册的含义是什么呢?对我来说,"旧日志被压缩后"部分似乎不仅令人困惑,而且是错误的. (3认同)
  • 谢谢,我应该仔细阅读手册页...虽然这些信息也应该在压缩选项说明下. (2认同)
  • 那些对通过logrotate完成事情的顺序感兴趣的人会发现`logrotate -d`很有用-它可以告诉您发生了什么。您可能还需要使用`-f`。 (2认同)