定期清理日志相关

最近对日志清理做了些肤浅的研究,基本可以归纳为两个方式

#第一种写法
echo > 日志
#第二种写法
cat /dev/null > 日志

这两种是比较好的,原因是可以立即释放磁盘资源
echo “” > 日志 这种写法不推荐,因为会在首行留有一个空白行,虽然没啥影响,但是强迫症患者接受不能

再说遇到的两个坑,第一个坑,正在被写入的文件,无论哪种方式都清不了,要么在他不写入的间隙清理,要么停掉服务再清日志,再有就是日志存储用 >> 叠加重定向写入比较容易清
比如

nohup java -jar 123.jar > nohup.out 2>&1 &

这种java微服务的启动方式换成

nohup java -jar 123.jar >> nohup.out 2>&1 &

日志就比较容易清理

再说第二个坑,如果日志文件集中储存,比如某logs目录中有一堆log文件需要清,就需要遍历清理,而遍历时切忌使用ls 目录来做遍历,举个错误的例子说明

#错误示例
for i in `ls /root/logs`
do
cat /dev/null > $i
done

这样写有个致命的问题就是分隔符,虽然ls能遍历出目录下的文件,但是他的分隔符不是回车,会莫名导致的出现复制文件的出现,这里触发了什么机制还不清楚,总之不要用ls做遍历!!不要用ls做遍历!!不要用ls做遍历!!

正确写法:

for i in `find /root/logs -type f -name "*log*"`
do
cat /dev/null > $i
done

用find来检索出的文件就是以回车做分隔符,这样遍历出来的就没问题。还有就是要加**-type f**作为选项,目录本身就有log的关键字,也就是目录本身也会被find查到,那肯定是没法将空写进去的,所以指定检索结果是文件类就行了

猜你喜欢

转载自blog.csdn.net/qq_35855396/article/details/116060887