如何防止日志变得太大?

我有一个运行一些Python脚本的cronjob,它们会生成大量的日志文件。 我如何防止它们变得如此之大? 如果文件在达到一定大小后被删除,那将是完美的。 因为每隔几天,该文件现在为50MB,但是变得更大并且需要永久地下载和分析慢速互联网连接上的错误。 我真的只想看到最后1000行看到脚本出错的地方。

我知道我可以编写一些代码来做这件事,但我只是想知道Linux是否有一些我不知道的东西。 我想大日志文件是一个常见的问题。 谢谢。

通常,您应该只记录您关心的活动,并且如果可能的话,应该将程序配置为更简洁。

如建议的那样,使用logrotate是处理日志文件的常用方法。 但是,您应该将自己的作业添加到/etc/logrotate.d/ ,而不是向/etc/logrotate.conf添加内容,否则您必须在发布升级期间查看更多配置文件差异。

这是我为php脚本创建的一个例子:

 /var/log/some-php-app/*.log { daily rotate 10 delaycompress compress notifempty missingok } 
  • /var/log/some-php-app/*.log – 日志文件所在的路径及其名称。 如您所见,您还可以使用通配符将规则应用于多个日志文件。
  • 每日每天轮换日志文件。 替代方案:每小时,每周,每月,每年,最大化,最大化
  • 旋转 计数 – 文件在被删除或邮寄到mail指令中指定的地址之前被旋转计数次数。
  • delaycompress – 将前一个日志文件的压缩推迟到下一个循环周期。
  • compress – 使用gzip压缩旧版本的日志文件。 您可以使用zless而不是less来查看文件。
  • notifempty – 如果日志为空,则不旋转日志。
  • missingok – 当日志文件丢失时,继续执行下一个旋转作业而不发出错误消息。

有关更多选项,请查看logrotate联机帮助页 。

您需要在/etc/logrotate.conf中设置大小

该文件默认存在,每天运行。 您需要做的唯一事情是向logrotate.conf添加一些额外的参数。

 /path/to_big.log { size 1k create 700 user group rotate 1 } 

在此示例中,我们指定了日志的路径,我们要将其限制为的大小,替换日志的权限以及要保留的副本数。 旋转1将保留一个副本。

如果您的日志增长非常快,您不能等待cron每天运行一次logrotate,这是默认设置上一个答案中提到的大小限制后的默认值,您可以在/etc/cron.hourly中创建一个符号链接到使用以下命令在/etc/cron.daily中logrotate cron作业:

 sudo ln -s /etc/cron.daily/logrotate /etc/cron.hourly/ 

您唯一需要记住的是,一旦解决了创建过多日志的问题,请确保删除链接。 也就是说,如果你有一些不受控制的东西创建过多的日志,你需要报告一个关于问题的错误,因为它可能会影响其他人而不会意识到这一点。 这种错误可能导致根卷空间不足,然后人们会看到各种问题而从未意识到这是因为它们在root上空间不足。