如何防止日志变得太大?
我有一个运行一些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上空间不足。