暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【docker】日志清理脚本优化

ERGOisTESTING 2021-06-10
1200


【背景】

        前文:《【docker】日志清理与控制》

        基于前文改了全局配置设置日志分隔之后的原先的清理脚本可能无法清理分割后日志,稍微优化下脚本,顺便配到Jenkins上。



【正文】

1、稍微介绍下原始脚本的内容

#!/bin/sh
echo "===start clean docker containers logs ====" 
logs=$(find var/lib/docker/containers/ -name *-json.log)
for log in $logs
do
    echo "clean logs:" 
    echo $log
    cat dev/null>$log
done
echo "===end clean docker containers logs ==="

echo `date`

①echo""那两行就说明下开始清理、清理完了,还有for循环中那个echo就是把清理的文件名输出下,说明正在清理的具体是哪个文件,最后一个就是输出下执行的具体日期时间。

②第一个logs=$……那行就是设置个变量,变量值就是docker日志文件,组成是路径+文件名,默认路径是上面配的那个,如果自己有改动可以调整,文件名一般是容器id-json.log,由于容器数量比较多,所以就设置成了变量,方便后面挨个清理。

③for循环中的就具体执行清理,通过cat dev/bull>文件名,清空文件内容。(不删除文件)


2、加点内容清理历史分割日志

现在的情况就是在分割后的日志是id-json.log.1,id-json.log.2,id-json.log.3……,原先的脚本只能清理正在记录的日志,也就是id-json.log文件的内容。在原基础上再加下面这段:

#P2删除.json.*历史分割日志文件
echo "=== start delete history logs ====" 
logs2=$(find data/dockerlogs/containers/ -name *-json.log.*)
for loga in $logs2
do
    echo "delete logs2:" 
    echo $loga
    rm $loga
done
echo "=== end delete history logs ==="

根据名称……*-json.log.*查找然后循环删除,逻辑跟原始脚本一致。


3、其他可能遇到的奇葩问题

有遇到过一个把路径配到了“/data/dockerlogs ……”路径下,注意这里“dockerlogs”后面有个空格,这种清理下使用find就会找不到路径不管用“/data/dockerlogs\ /……”还是“/data/"dockerlogs "/……”都不行。

其实解决办法很简单就是在脚本最前面先进入目录:

cd /home/dockerlogs\ /containers/

后面变量就去掉路径:

logs=$(find -name *-json.log)

4、把docker日志清理配到Jenkins上

①其实就是建个任务,加个构建步骤“execute shell scripts on remote host using ssh”,把脚本内容复制上去。

②设置每周五晚上7点自动清理一次

③顺便配个钉钉通知

5、构建效果

配置完后构建一次,看下通知效果还有控制台输出信息。



【结语】

        没啥,就感慨下Jenkins是真的方便,万物皆可Jenkins(尤其配上钉钉通知,真香)。

文章转载自ERGOisTESTING,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论