定时压缩备份日志文件
思路:
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 技术交流群。
上一篇: 查看 RDS binLog
下一篇: 彻底找到 Tomcat 启动速度慢的元凶
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论