目录


说明:

        公司系统架构较大,分为多个系统,经手人员过多,日志目录不统一,难以统一管理,为了处理每日庞大的应用日志,利用shell对日志进行备份并挪至mfs。


一、备份应用日志脚本:建议使用(1)

步骤一:shell脚本内容

#!/bin/bash
LOGPATH=([1]=/opt/app/app1/logs [2]=/opt/app/app2/logs) # 应用日志目录;请将应用日志目录与挂载目录路径[序号]相匹配
BACKPATH=([1]=/mfsdata/NW/app1 [2]=/mfsdata/NW/app2) # MFS挂载目录;格式:[序号]=日志路径(路径最后不可以加'/',否则报错)
IPADDR=`ip addr show "eth0" | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | awk 'BEGIN{FS="."}{print $3"."$4}'` # 获取IP后两位
DATE=`date +%Y-%m-%d` # 当前日期

# 定义函数体1:将一天前的日志压缩打包
function Func1(){
for((n=1;n<=${#BACKPATH[*]};n++));do
        for i in ${LOGPATH[${n}]};do 
            for file in `find ${i} -name '*log*' ! -name '*.tar.gz' -type f ! -mtime -0 -exec basename {} \;`;do tar -zvcf ${i}/${file}.tar.gz -C ${i} ${file} && rm -f ${i}/${file};mv ${i}/${file}.tar.gz  ${BACKPATH[${n}]}/${IPADDR}.${file}.tar.gz;
            done;done;done # for1循环备份路径数量次(日志路径也行),for2获取日志路径,for3搜索日志路径下24小时之外的日志,取出日志名,将日志打包,-C指定存放路径,打包完删除原日志,将打包好的tar包加上ip区分存放到备份路径
}

echo "---开始执行日志备份脚本---""执行日期:${DATE}"
Func1 1>/dev/null 2>&1 # 执行函数
echo $? # 返回函数执行状态码;正常0 异常1
echo "---日志备份脚本执行结束---"

二、备份应用日志脚本(2)

步骤一:shell脚本内容

#!/bin/bash
LOGPATH=([1]=/opt/app/app1/logs [2]=/opt/app/app2/logs) # 应用日志目录;请将应用日志目录与挂载目录路径[序号]相匹配
BACKPATH=([1]=/mfsdata/NW/app1 [2]=/mfsdata/NW/app2) # MFS挂载目录;格式:[序号]=日志路径(路径最后不可以加'/',否则报错)
IPADDR=`ip addr show "eth0" | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | awk 'BEGIN{FS="."}{print $3"."$4}'` # 获取IP后两位(应用多个节点,通过ip区分挂载目录下的日志)
DATE=`date +%Y-%m-%d` # 当前日期

# 定义函数1:将一天前的日志压缩打包
function Func1(){
        for i in ${LOGPATH[*]};do
                for file in `find ${i} -name '*log*' ! -name '*.tar.gz' -type f ! -mtime -0 -exec basename {} \;`;do
                tar -zvcf ${i}/${file}.tar.gz -C ${i} ${file} && rm -f ${i}/${file};done;done
}
# 定义函数2:将打包的日志挪到BACKPATH目录下
function Func2(){
        for((i=1;i<=${#BACKPATH[*]};i++));do
                for obj in `find ${LOGPATH[${i}]} -name '*.tar.gz' -type f -exec basename {} \;`;do
                mv ${LOGPATH[${i}]}/${obj} ${BACKPATH[${i}]}/${IPADDR}.${obj};done;done
}

echo "---开始执行日志备份脚本---""执行日期:${DATE}"
Func1 1>/dev/null 2>&1 && Func2 1>/dev/null 2>&1 # 执行函数,确保Func1(打包压缩)完成之后再执行Func2(挪移到指定目录)
echo $? # 返回函数执行状态码;正常0 异常1
echo "---日志备份脚本执行结束---"

步骤二: 添加定时任务:

  1. chmod +x new_bak.sh
  2.  (crontab -l;echo "0 1 * * * sh ~/new_bak.sh") | crontab

三、置空nohup、stdout脚本

步骤一:shell脚本内容

#!/bin/bash
LOGPATH='/opt/app'
function Func1(){
        for i in `find ${LOGPATH} -name 'nohup.out' -o -name 'stdout.log'`;do
        echo > ${i};done # 置空输出文件
}
echo "---正在清除nohup;stdout文件---"
Func1 1>/dev/null 2&>1
echo "---清除完成--"

 步骤二:添加定时任务:

  1. chmod +x LOGempty.sh
  2. (crontab -l;echo "0 */4 * * * sh ~/LOGempty.sh") | crontab

总结

注意:因为作者公司系统应用目录乱才选择自己填写路径,若公司路径是统一的则可以去适当调整shell脚本,通过命令获取应用路径。(应用日志目录序号需要和MFS路径序号相匹配喔)

Logo

更多推荐