killall -USR1 httpd

killall -USR1 httpd

当磁盘空间不足,日志文件占用了几 GB,而磁盘空间又不够时,在不丢失任何日志的情况下最好的处理方案是什么?

我尝试过的方法是 mv 日志文件并压缩,但这会在 lsof 中显示为已删除,这可能会在将来出现问题。

可能对日志文件进行 gzip 压缩,然后 kill -1 进程。但是,这是您在生产服务器上为 httpd 和 mysql 等服务执行的操作吗?


谢谢。Ob

答案1

如果存储空间已满,则压缩将不起作用,因为没有空间存放临时文件。

将日志复制到其他存储。 scp -r /var/log/ otherhost:

查看并删除旧日志文件。 find /var/log -mtime +7

如果有必要,扩展文件系统。

压缩一些大文件。重新加载服务以打开新的日志文件。gzip /var/log/httpd/access_log ; systemctl reload httpd.service

执行 logrotate 或等效脚本来自动管理这些。通常的模式是将当前文件移动到新名称,然后重新打开新的日志文件。

考虑实施远程日志服务器并将日志从主机发送出去。


是否向服务发送信号或以其他方式重新加载它取决于您。当然,如果您感到紧张,您可以在测试系统上尝试。

如果你不告诉服务打开新文件,还有另一个选项:就地截断。 cp /dev/null file.log 或 logrotate 选项copytruncate。但是,请注意 lograte 手册页中关于这不是原子的警告:

请注意,复制文件和截断文件之间的时间间隔非常小,因此某些日志数据可能会丢失。

答案2

对于 Apache 使用 USR1 信号:

killall -USR1 httpd

对于 mysql flush logs 命令:

mysqladmin 刷新日志

但使用 logrotate 来轮换日志可能更好,它通常附带 apache/mysql 的配置,基本上可以帮你完成这项工作并对日志进行 gzip 压缩。这是生产服务器上的常见做法。

相关内容