如何截断所有日志文件?

如何截断所有日志文件?

有人能给我一个解决方案来截断/var/log/目录中的所有日志文件吗?

只是为了了解一个知识的问题,这是一个好主意吗?

#!/bin/bash
LOGDIR="/var/log"
for logfile in $(ls $LOGDIR/*log)
do
  truncate -s 0 $logfile
done

答案1

尝试这个:

truncate -s 0 /var/log/*log

编辑:

如果你想多次执行此操作,你应该使用它logrotate来处理你的日志。通常它安装在 ubuntu 中。查看man logrotate(或者如果你没有安装它,请查看在线手册页或使用以下方式安装sudo apt-get install logrotate

来自手册页:

logrotate 旨在简化生成大量日志文件的系统的管理。它允许自动轮换、压缩、删除和邮寄日志文件。每个日志文件可以按日、周、月或当其变得太大时进行处理。

答案2

如果你想清除全部您的日志文件,而不仅仅是第一级日志文件夹中的文件,您可以使用:

shopt -s globstar                  # if needed
truncate -s 0 /var/log/*.log       # first-level logs
truncate -s 0 /var/log/**/*.log    # nested folders, like /var/log/nginx/access.log

请注意,如果您已经在logrotate运行,您还需要清除轮换的.gz日志:

find /var/log -type f -name '*.[0-99].gz' -exec rm {} +

例如,一个有效的用途可以是构建一个用于分发的 VM 设备容器。

你应该不是需要将其作为日常维护的一部分来执行:正如 DEN 非常正确建议的那样,使用logrotate它。

答案3

作为后续行动@DEN回答

这将找到所有日志文件/var/log并将其截断为 0 字节。

find /var/log -type f -iname '*.log' -print0 | xargs -0 truncate -s0

答案4

使用 logrotate 功能轮换 /var/logs 中的日志是一种很好的做法,但并非我们想轮换就轮换。系统日志将打印出来,它们将方便调试任何故障。

如果要求不使用 logrotate,则可以探索其他选项。虽然 truncate 是少数 unix 系统中的简单选项,但此命令并非随时可用,需要安装。如果不允许安装新命令,则可以使用以下循环。

for logfile $(ls /path/*.log)
do 
  cat /dev/null > $logfile
done

相关内容