在我的 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/加载?
答案4
echo "0" > monthly.log && rm -f monthly.log