如何在运行 pyapns 和 twistd 时轮换日志文件

如何在运行 pyapns 和 twistd 时轮换日志文件

我使用 pyapns(Iphone 推送服务器),它又使用 twisted(twistd 守护进程)。

twistd 守护进程生成 twistd.log 文件。当 twistd.log 达到 1MB 时,它会将它们轮换为 twistd.log.1、twistd.log.2 等等,但它不使用 logrotate,所以我猜它是内置的。

问题是这种情况会一直持续下去,而且旧的日志文件永远不会被删除。最终会占满我的磁盘。

我尝试使用 logrotate 或类似工具来轮换日志,但这样我就需要非常频繁地运行 logrotate,因为我需要在 twistd.log 达到 1MB 之前轮换。据我所知,这可能在一秒钟内发生,具体取决于生成的日志量。

那么,如何在不破解 pyapns/twistd 脚本的情况下进行 logrotate 呢?

答案1

实际上没有办法使用常规 logrotate 来实现这一点。Logrotate 不是守护进程,它由 cron 运行,通常每天运行一次。

您可以将其更改为每隔几秒运行一次,但是如果 1MB 可以如此快地填满,则 logrotate 无法跟上。

为什么不写一个简单的 cron 作业来删除所有多余的轮换日志文件,并让 pyapns/twistd 继续以 1MB 的速度轮换呢?例如,你可以删除所有超过一周的文件,使用如下简单的 cron 作业:

/usr/bin/find /var/log/twistd/* -mtime +7 -exec /bin/rm {} \;

您甚至可以压缩文件,例如:

/usr/bin/find /var/log/twistd/* -regex '*.log.[0-9]+' | /usr/bin/xargs -I{} /bin/gzip {}

这样,您可以模拟 logrotate 行为,而无需关闭 Twistd 内部 logrotate,并且不会有磁盘填满的风险。

相关内容