定时对log备份和瘦身 - yiyixiaozhi/readingNotes GitHub Wiki

定时压缩备份日志文件

思路: 1、先判断日志大小,如果超过上限,重启程序 2、程序打印新的log文件,以程序启动的时间戳进行命名。 3、压缩*.log,除过最近一次的log文件。

slimmingLog.sh

$ cat ./slimmingLog.sh 
#!/bin/bash
CUR_DIR=$(pwd)
echo "Current path:"$CUR_DIR
# cd $CUR_DIR
cd /home/qz/testplatform-master/testplatform-log-8096/logs
echo "slimming *.log"
logFiles=`ls -l *.log | awk '{print $9}'`
for fileName in $logFiles
do
  # 获取文件大小
  size=`ls -l $fileName | awk '{print $5}'`
  # 大于500MB的话,重启服务
  if [ $size -gt 524288000 ]
  then
    cd ..
    ./restart.sh
  fi
done

重启程序,程序会打印log

$ cat ../restart.sh 
#!/bin/bash
CUR_DIR=$(pwd)
echo "Current path:"$CUR_DIR
cd $CUR_DIR
echo "stoping server port:8096"
pid=`ps -ef | grep 'test-app.jar' | grep -v grep | awk '{print $2}'`
for pidname in $pid;
  do
    if [ -n "$pid" ];then
      echo "kill -9 pid:"$pidname
      kill -9 $pid
    fi
  done

timestring=`date "+%Y%m%d%H%M%S"`
nohup java -Xms512m -Xmx512m -jar -Dspring.profiles.active=prod test-app.jar > logs/web-$timestring.log &
cd logs
# 自动备份log到目标机器上
./autoBackUpLogToHbxy03.sh

备份log到目标机器上

思路:获取目录下的所有*.log文件,获取到文件名和扩展名,然后重命名后拷贝到目标机器上。

$ cat ./autoBackUpLogToHbxy03.sh 
#!/bin/bash
fileList=`ls -lh *.log | awk '{print $9}'`
fileNum=`ls -l *.log | wc -l`
CUR_DIR=$(pwd)
echo "$CUR_DIR/*.log文件总数=$fileNum"
index=0
for filename in $fileList;
  do
    echo "logFile[$index]:文件名=${filename%.*},扩展名=${filename#*.}"
    index=`expr $index + 1`
    if [ "$fileNum" == "$index" ];then
      echo "保留文件:$filename"
    else
      echo "压缩文件:tar ${filename%.*}.tar.gz $filename"
      tar -czvf ${filename%.*}.tar.gz $filename
      echo "备份日志文件${filename%.*}.tar.gz压缩包到hbxy03服务器"
      #./scpToHbxy03-log.sh $CUR_DIR/${filename%.*}.tar.gz [email protected]:/kuorong/test-logs/${filename%.*}-API.tar.gz [/bash]
      expect << EOF
      spawn scp -r -P 22 $CUR_DIR/${filename%.*}.tar.gz [email protected]:/kuorong/test-logs/${filename%.*}-API.tar.gz
      # 设置超时30秒
      set timeout 30
      # 发送密码
      expect "password:"
      set timeout 30
      send "testPasswd\r"
      expect eof
      exit 0
EOF
      echo "删除文件:rm $filename; rm ${filename%.*}.tar.gz"
      rm $filename
      rm ${filename%.*}.tar.gz
    fi
  done

有的情况可以执行脚本时获取入参,执行拷贝命令

$ cat ./scpToHbxy03-log.sh 
#!/usr/bin/expect
set srcFilePath [lrange $argv 0 0]
set desFilePath [lrange $argv 1 1]
set timeout 5
spawn scp -r -P 22 $srcFilePath $desFilePath
expect "password:"
send "testPasswd\n"
interact
⚠️ **GitHub.com Fallback** ⚠️