zoukankan      html  css  js  c++  java
  • shell 删除日志

    一般线上服务的日志都是采用回滚的防止,写一定数量的日志

    或是有管理工具定期去转移老旧日志

    前几天删除一个测试环境的日志,只保留两天的日志,结果把正在写的日志都给删掉了,不得不重启了服务,经过这一次的错误,积攒了一些删除日志的经验

    1、不同服务的日志更新速度是不同的,有的日志一秒就会写一个规定大小的文件,有的服务日志可能会一个月也写不满一个文件,或者根本就不写文件,所以在删除日志的时候要考虑不同服务文件时要弄清一下几点:系统显示的时间是什么时间(创建时间,修改时间,访问时间),更新速度,后缀名,删除正在写的日志,会不会重写

    2、log目录子目录中是否也有日志文件,避免勿删调其他的脚本文件或是其他

    #!/bin/bash
    for log in `ls ./log`
    do
            case "$log" in
            "log1")
    #文件个数小于10个不删除
            n=`ls -l ./log/$log |grep "^-"|wc -l`
            if (($n<10));then
                    echo -e "file count < 10 ,don't del
    "
            else
                    echo -e "find flie 
    "
                    find ./log/$log/ -maxdepth 1 -mmin +2880 -type f -exec basename {} ; > /root/filecount.txt
                    cat /root/filecount.txt
    #要删除文件的个数
                    nn=`cat /root/filecount.txt|wc -l`
                    echo -e "fine count id $nn 
    "
    #保留文件的个数
    ((restfile
    =$n-$nn)) if (("$restfile" < 10));then #由新到旧排序 #ls -lt echo -e "resrtfile count < 10 is $restfile " #由旧到新排序 ls -tr ./log/$log |grep -E -e "*.log" -e "*.txt" > /root/filecount.txt #保留最新的10个,其余的删除 echo -e "delfile filename is " cat /root/filecount.txt ((delfile=$n-10)) i=1 for filename in `cat /root/filecount.txt` do if (($i==$delfile));then echo -e "file counet is $delfile end del " exit 1 else echo "del file is the $i -- $filename " rm -rf ./log/$log/$filename fi ((i=$i+1)) done else echo "restfile >10 del all find" find ./log/$log/ -maxdepth 1 -mmin +2880 -type f -delete fi fi ;; esac done
  • 相关阅读:
    史上自定义 JavaScript 函数Top 10
    switch
    (不)扩展内置原型((Not) Augmenting Built-in Prototypes)
    for-in循环(for-in Loops)
    for
    在dreamweaver中设置php服务器F12预览的方法介绍
    method
    CSS中background-image【CSS Sprites,base64编码】
    shell编程中的小问题
    常见的linux问题积累
  • 原文地址:https://www.cnblogs.com/Pierre-de-Ronsard/p/3329809.html
Copyright © 2011-2022 走看看