• shell实战之日志备份


    util.sh

    #!/bin/bash -
    
    # Read config
    # kay
    # Version: 1.0
    # 06/22/2016
    
    # configuration file path
    config=${log_bak}/"cfg"
    
    # config parameters
    prefix=`grep -v "^#" ${config}`
    begin=`echo "${prefix}" | grep  'begin' | awk -F '=' '{ print $2 } '`
    logpath=`echo "${prefix}" | grep  'logpath' | awk -F '=' '{ print $2 }' | awk -F ';' '{ for(i=1;i<=NF;i++) print $i }'`
    shpath=`echo "${prefix}" | grep  'shpath' | awk -F '=' '{ print $2 }'`
    bakpath=`echo "${prefix}" | grep  'bakpath' | awk -F '=' '{ print $2 }'`

    cfg

    # This is generated to be a configuration file.
    # kay
    # 06/22/2016
    
    # This is a parameter for crontab and objective file.
    begin=15
    
    # This are some log path 
    # logpath=/root/shell/log/26;/root/shell/log/27;/root/shell/log/28
    logpath=/home/pospadm/trc
    
    # bak path
    bakpath=/home/kycap/bak
    
    # sh path
    shpath=/home/pospadm/log-bak/start.sh

    crontab.sh

    #!/bin/bash -
    
    # Used to do a crontab task
    # kay
    # Version: 1.0
    # 06/22/2016
    
    # @Name: docrontab
    # @Parameter: specific crontab task
    docrontab()
    {
        cronfile="/tmp/crontab.${USER}"
        crontab -l > ${cronfile}
        query=`echo "$1" | sed 's/*/\*/g'`
        grep -q "${query}" ${cronfile} && echo "" ||
        {
                echo "$1" >> ${cronfile}
                crontab ${cronfile}
        }
        rm -f ${cronfile}
    }

    readme

    1.设置环境变量
    log_bak=脚本所在目录
    2.启动脚本
    ./start.sh
    3.停止脚本
    ./stop.sh

    start.sh

    #!/bin/bash -
    
    # This file is used to handle log bak 
    # kay
    # Version: 1.0
    # 06/22/2016
    
    . ${HOME}/.bash_profile
    . ${log_bak}/util.sh
    . ${log_bak}/crontab.sh
    
    # add crontab
    task="0 0 * * * "${shpath}
    docrontab "${task}"
    
    #echo "${bakpath}" >> ret.log
    cd ${bakpath}
    current=`date +"%Y%m%d"`
    mkdir ${current} 2>/dev/null 
    cd ${current}
    
    # handle every specific file 
    for d in ${logpath}
    do
        # search for all directories before time begin
        filelist=`find "${d}" -mtime +"${begin}" -type f`
        for f in ${filelist[@]}
        do
            dir=`echo ${f} | awk -F '/' '{ print $(NF - 1) }'`    
            mkdir ${dir} 2>/dev/null
            mv ${f} ${dir}
        done
    done
    
    # tar log
    cd ${bakpath}
    tar -zcf "${current}.tar.gz" ${current}
    rm -rf ${current}

    stop.sh

    #!/bin/bash -
    
    # Used to stop script and crontab
    # kay
    # Version: 1.0
    # 06/22/2016
    
    crontab -r
    ps -ef | grep 'start' | awk -F ' ' '{ print $2 }' | xargs kill -9
  • 相关阅读:
    命令行打开无线网络设置
    WebView2 的使用记录
    QT-Mac:在Mac下实现QT程序的打包及公证
    QT:CEF实现js函数与C++函数的异步调用
    QT-Mac:QT Creator 中QT Versions显示无效的QT版本的解决办法
    QT-Mac: Undefined symbols for architecture x86_64
    全局键盘钩子失效与WebRTC的关系分析
    第十二届蓝桥杯决赛 大学 B 组 C/C++ 做题记录
    Luogu P2671 求和 | 数学奇偶性&前缀和
    2021铁三决赛 PWN cardstore | 格式化字符串 & ret2libc
  • 原文地址:https://www.cnblogs.com/seeken/p/5625967.html
Copyright © 2020-2023  润新知