删除非常大的文件而不冻结网络服务器

删除非常大的文件而不冻结网络服务器

在我的 Web 服务器(apache 正在运行,Linux CentOS)中,有一个非常大的日志文件(50 GB)。该 Web 服务器有一些正在生产中的 Web 服务。

当我尝试删除日志文件时,Web 服务器大约 10 秒没有响应。(服务中断。)

rm -f monthly.log

有没有什么办法可以删除这个大文件而不让 apache 冻结?

答案1

首先通过 旋转它logrotate,使用如下配置:

/path/to/the/log {
    missingok
    notifempty
    sharedscripts
    daily   
    rotate 7
    postrotate
        /sbin/service httpd reload > /dev/null 2>/dev/null || true
    endscript
    compress
}

然后在午夜创建一个 cron 作业来删除轮换的文件:

30 2 * * * nice -n 19 ionice -c2 -n7 rm -f /path/to/the/log/file.1

答案2

为了更快地删除大文件,您可以使用命令truncate- 说将其缩小到零大小,然后删除它:

 truncate -s 0  monthly.log && rm -f monthly.log

正如 quanta 所建议的,您需要先对其进行 logrotate。

答案3

我将通过该操作截断/清零文件: > /path/to/monthly.log。然后可能重新启动 Apache 进程并设置日志轮换以防止将来发生这种情况...

但这种情况经常出现:

看:有没有办法在 Linux 上删除 100GB 的文件,而不会影响 IO/加载?

在 unix 中,减少正在写入的大量日志文件的大小的最佳方法是什么?

Linux 服务器空间不足

答案4

echo "0" > monthly.log && rm -f monthly.log

相关内容