首页 > 系统相关 >shell脚本:将运行容器的日志输出到文件清理服务器上的符合条件的docker镜像

shell脚本:将运行容器的日志输出到文件清理服务器上的符合条件的docker镜像

时间:2023-07-04 16:57:24浏览次数:37  
标签:shell grep log service images docker 日志 pod

采集容器日志的shell脚本内容为:

点击查看代码
#!/bin/bash
export LANG=zh_CN.gb18030
. ~/.bash_profile

#日志放置目录
log_path=/aa/bb/cc/dd/ee
todaydate=$(date +%Y%m%d)
nowdate=$(date +%Y%m%d%H%M)

#pod列表
dube_pod_id='xx1-service xx2-service xx3-service xx4-service xx5-service'

#日志保留天数
reverseDay=7

#文件名
fileName=$(basename "${BASH_SOURCE[0]}")

#初始判断
init(){   
    #清理缓存
    echo 3 > /proc/sys/vm/drop_caches

    #备份目录不存在,创建备份目录
    [ -d "${log_path}" ] || {
        mkdir -p ${log_path} &> /dev/null
        
        #创建备份目录失败,退出
        [ $? -ne 0 ] && {
            echo "创建日志目录 ${log_path}失败,退出..."
            exit 222
        }
    }
}

#清理历史日志文件
cleaOldLog(){
    for fileName in $(find ${log_path} -type f  -mtime ${reverseDay});do
        rm -f ${fileName}
    done
}

#抓取日志
function fetchLog(){
    for pod_id in ${dube_pod_id[*]}; do
    
	# 对大于50M的文件进行分片
	 find ${log_path}/ -size +50M -name $pod_id==${todaydate}.log | xargs -i  cp {} ${log_path}/$pod_id==${nowdate}.log && echo > ${log_path}/$pod_id==${todaydate}.log
        #查看是否处于运行状态。如果是运行状态
        docker ps | grep ${pod_id} > /dev/null 2>& 1
        #如果运行状态,查看是否正在抓取日志
        if [ $? -eq 0 ];then
            
            #判断是否已经后台在抓取对应服务的日志。如果没抓取则抓取
            ps -ef|grep -e cronolog |grep  $pod_id  > /dev/null 2>& 1
            
            if [ $? -ne 0 ];then
                nohup docker logs -f  $pod_id |/usr/local/sbin/cronolog ${log_path}/$pod_id==%Y%m%d.log 2>&1&
            fi
        fi
    done
}

#主函数
main(){
    #判断是否已经运行该脚本。如果已经运行则不运行初始化和抓取工作,只是清理历史日志文件。方便配置定时任务
    running_count=$(ps -ef |grep ${fileName} | grep -v "grep" | wc -l )
    
    if [ ${running_count} -le 2 ];then
        init
        fetchLog
    fi
    
    #清理历史日志文件
    cleaOldLog
}

main

对容器镜像进行清理的脚本未:

点击查看代码
#!/bin/sh
# 所有的基础镜像暂时不动: tomcat7.0.92:jdk8 tomcat:9.0.68 nginx:1.23

messages=/var/log/messages
month=$(tail -n 1 $messages | awk '{print $1}')
day=$(tail -n 1 $messages | awk '{print $2}')
time=$(date +"%H:%M:%S")
hostname=$(hostname)
needdelimg='xx1-service xx2-service xx3-service'


# delete标记为空: docker images -f dangling=true
function DELALLNOTAG() {
  dlnum=$(docker images -f dangling=true | grep -vE 'REPOSITORY|11fc437dbfa2'|wc -l)
  if [ $dlnum -gt 0 ]; then
    docker images -f dangling=true|grep -vE 'REPOSITORY|11fc437dbfa2'|awk '{print $3}'|xargs docker rmi
    if [ $? == 0 ]; then
      echo "$month  $day $time $hostname docker-rmi-images: dangling=true succeed" >> $messages
    else
      echo "$month  $day $time $hostname docker-rmi-images: dangling=true failed" >> $messages
    fi
  else
    echo "$month  $day $time $hostname docker-rmi-images: dangling=true no images" >> $messages
  fi
}


# 系统类容器镜像进行删除的方法
function DELETEIMG() {
  # eg: $1 == sproc-service
  cname=$1
  imgnum=0
  # 判断是否传入参数
  [ -e $cname ] && exit 111
  # 运行容器的镜像信息
  rimg=$(docker inspect $cname|grep -i image |grep -i $cname|awk '{print $2}'|sed 's#"##g'|sed 's#,##g' )
  imgnum=$(docker images xx1-service -f "before=$rimg"|grep -vE 'hours ago|2 days ago|REPOSITORY'|wc -l)
  if [ $imgnum -gt 5 ]; then
    docker images xx2-service -f "before=$rimg"|grep -vE 'hours ago|2 days ago|REPOSITORY'|awk '{print $3}'|xargs docker rmi
    if [ $? == 0 ]; then
      echo "$month  $day $time $hostname docker-rmi-images: $cname succeed" >> $messages
    else    
      echo "$month  $day $time $hostname docker-rmi-images: $cname failed" >> $messages
    fi
  else
    echo "$month  $day $time $hostname docker-rmi-images: $cname imagenum=$imgnum" >> $messages
  fi
}


# 执行删除镜像
function main() {
  # delete all no tag images 
  DELALLNOTAG
  
  # delete old images
  for i in $needdelimg; do
    DELETEIMG $i
  done

  # remove all unused volumes
  # docker volume prune
}


main

标签:shell,grep,log,service,images,docker,日志,pod
From: https://www.cnblogs.com/qinwengang/p/17526180.html

相关文章

  • shell脚本:对开发入库的sql脚本进行检查
    shell脚本内容为:点击查看代码#!/bin/bashexportLANG=en_US.UTF-8exportNLS_LANG="AMERICAN_AMERICA.AL32UTF8"source/etc/profilesource/root/.bash_profileHOME=$(cd$(dirname$0);pwd)DOC_HOME=${HOME}/releasedocDOC_SVN_PATH=http://192.168.xx.xx/bushi......
  • windows下mysql中binlog日志分析和数据恢复
    1.首先查看是否开启了binlogshowvariableslike'%log_bin%'; 我的已经开启了,如果没开启则开启binlog2.查看有哪些binlog文件和正在使用的binlog文件 查看有哪些binlog文件showbinarylogs;或者showmasterlogs; 查看当前正在使用的是哪一个binlog文件show......
  • docker 默认网段设置
    bip配置,只会对docker0网桥生效vim/etc/docker/daemon.json{"bip":"192.168.100.1/24"}较低版本的docker,不支持default-address-pools配置项,需要先升级Docker版本default-address-pools对docker-compose新创建的容器生效vim/etc/docker/daemon.json{"default-ad......
  • Docker 数据卷的备份和还原
    数据备份方法:dockerrun--volumes-from[containername]-v$(pwd):/backupcentostarczvf/backup/backup.tar[containerdatavolume]例子:dockerrun--volumes-fromdata-volume2-v/root/backup:/backup--namedatavolume-copycentostarzcvf/backup/data-volume......
  • 如何正确格式化sqlite shell输出?
    sqlite>.modecolumnsqlite>select*fromfoo;234kshitizdba.sesqlite>.headersonsqlite>select*fromfoo;barbazbaf------------------------------234kshitizdba.seecho-e'.modecolum......
  • docker 设置日志大小
    1、单独某个容器dockerrun或dokcercreate时添加参数如创建并运行dockerrun--log-optmax-size=10m--log-optmax-file=32、全局范围内修改dockerdaemon.json文件,配置日志文件参数默认/etc/docker/daemon.json{ "log-driver":"json-file", "log-opts":{ "max-size&qu......
  • docker清理日志
    查出Docker容器日志并删除脚本默认查找目录/var/lib/docker/containers/#!/bin/shecho"========startcleandockercontainerslogs========"logs=$(find/var/lib/docker/containers/-name*-json.log)forlogin$logsdoecho"......
  • PowerShell系列四:容器操作
    容器容器是一个很通用的概念。比如文件、文件夹、注册表、磁盘分区、数组、hash表、命名空间、用户组、OU、数据库、数据表等等,它们的共同点就是包含了数据。在PowerShell中一切都是从"PSDrive"开始的,您熟悉了操作PSDrive,基本就涵盖了对资源的操作。Get-PSDrive#输出Name......
  • 记录XPO查询 日志
    记录由XPO产生和执行的sql语句//z2013-02-2714:01:[email protected][T215,L2906,R88,V3140]1.在App.Config中添加如下行:[XML]<?xmlversion="1.0"encoding="utf-8"?><configuration><system.diagnostics><switches&......
  • Windows Server 共享操作日志及分析工具
    前言:作为系统管理员可能会在企业搭建域环境及配置域共享目录,但共享目录的权限设置繁琐,因此大多数子目录都是部门可读可写,怎样审查谁做了新增删除文件成为管理的重点。其实我们可以通过Windows自带的审计服务完成该工作。 一,首先打开服务管理器,点击本地安全策略 二,在审核......