定时对log备份和瘦身 - yiyixiaozhi/readingNotes GitHub Wiki
定时压缩备份日志文件
思路: 1、先判断日志大小,如果超过上限,重启程序 2、程序打印新的log文件,以程序启动的时间戳进行命名。 3、压缩*.log,除过最近一次的log文件。
$ 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
$ 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文件,获取到文件名和扩展名,然后重命名后拷贝到目标机器上。
$ 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