定时压缩备份日志文件

发布于 2024-02-05 04:27:27 字数 2689 浏览 22 评论 0

思路:

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 test@172.31.192.3:/kuorong/test-logs/${filename%.*}-API.tar.gz [/bash]
      expect << EOF
      spawn scp -r -P 22 $CUR_DIR/${filename%.*}.tar.gz test@172.31.192.3:/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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

淡忘如思

暂无简介

0 文章
0 评论
24 人气
更多

推荐作者

内心激荡

文章 0 评论 0

JSmiles

文章 0 评论 0

左秋

文章 0 评论 0

迪街小绵羊

文章 0 评论 0

瞳孔里扚悲伤

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文