我有一个 cronjob 运行一些 Python 脚本,它们会生成大量日志文件。我该如何防止它们变得如此之大?如果文件达到一定大小后就删除,那就太好了。因为每隔几天,文件就会变成 50MB,但会变得更大,在慢速互联网连接上下载和分析错误需要很长时间。我真的只想看最后 1000 行,看看脚本哪里出了问题。
我知道我可以编写一些代码来做到这一点,但我只是想知道 Linux 是否有我不知道的东西。我想大日志文件是一个常见问题。谢谢。
答案1
通常,您应该只记录您关心的活动,并且应该尽可能将程序配置得不那么冗长。
根据建议,使用日志旋转是处理日志文件的常用方法。但/etc/logrotate.conf
您不应该向 中添加内容,而应该向 中添加自己的作业/etc/logrotate.d/
,否则在发布升级期间,您将不得不查看配置文件的更多差异。
下面是我为 php 脚本创建的示例:
/var/log/some-php-app/*.log {
daily
rotate 10
delaycompress
compress
notifempty
missingok
}
/var/log/some-php-app/*.log
- 是日志文件所在的路径及其名称。如您所见,您还可以使用通配符将规则应用于多个日志文件。- 日常的- 每日轮换日志文件。备选方案:每小时、每周、每月、每年、最大大小、最大次数
- 旋转 数数- 文件在被删除或邮寄到邮件指令中指定的地址之前会轮换计数次。
- 延时压缩- 将前一个日志文件的压缩推迟到下一个轮换周期。
- 压缩- 使用 gzip 压缩旧版本的日志文件。您可以使用
zless
而不是less
来查看文件。 - 通知为空- 如果日志为空则不轮换日志。
- missok- 当日志文件丢失时,继续下一个旋转作业而不发出错误消息。
看看logrotate 手册页以获得更多选项。
答案2
您需要在 /etc/logrotate.conf 中设置大小
该文件默认存在,并且每天运行。您唯一需要做的就是向 logrotate.conf 添加一些附加参数。
/path/to_big.log {
size 1k
create 700 user group
rotate 1
}
在此示例中,我们指定了日志的路径、要限制的大小、替换日志的权限以及要保留的副本数。旋转 1 将保留一份副本。
答案3
如果您的日志增长非常快,您不能等待 cron 每天运行一次 logrotate,因为这是设置前面答案中提到的大小限制后的默认设置,您可以在 /etc/cron.hourly 中创建一个符号链接到 /etc/cron.daily 中的 logrotate cron 作业,使用以下命令:
sudo ln -s /etc/cron.daily/logrotate /etc/cron.hourly/
您唯一需要记住的是,一旦解决导致产生过多日志的问题,请务必删除该链接。也就是说,如果您无法控制某些因素导致产生过多日志,则需要报告有关该问题的错误,因为它可能会在不知不觉中影响其他人。这种错误可能会导致根卷空间不足,然后人们会看到各种问题,却永远不会意识到这是因为他们的根卷空间不足。