1.正确的启动命令
nohup java -jar xx.jar >>xx.log 2>&1 &
2.错误的启动命令
nohup java -jar xx.jar >xx.log 2>&1 &
1)> 表示覆盖,>> 表示追加
2)当使用覆盖模式重定向日志时,清除日志时,常见的命令 >xx.log 或者 cat /dev/null > xx.log
日志内容虽然会被清除,但是空间没有释放,下载日志文件后可以看到前面的内容都变成了空行
3)要注意追加模式本身不会清除日志,而是为了后续能随时清除日志,所以如果要清除日志还需要额外去加一行清除日志的脚本
3. 启动并清除日志脚本
JAR=xxx-controller-0.0.1-SNAPSHOT.jar
PID=$(ps -ef |grep $JAR | grep -v grep | awk '{ print $2 }')
if [ -z "$PID" ]
then
echo Application is already stopped
else
echo kill $PID
kill -9 $PID
fi
# 因为是以追加模式启动的,所以还要先清空日志
> admin.log
nohup /usr/java/jdk-17.0.5/bin/java -jar $JAR --spring.profiles.active=test >>admin.log 2>&1 &
while true
do
RESULT=`tail -n 1000 admin.log |grep "Started MainProApplication in"`
if [ ${#RESULT} -eq 0 ];then
echo '启动中' & sleep 1
else
echo "启动完了,$PID"
break
fi
done
echo Application is run
4. .打包日志脚本
#!/bin/bash
current_path=$(pwd| awk '{ print $1 }')
log_path=${current_path}/log
today_logFile_path=${log_path}/$(date +"%Y-%m-%d").zip
# 创建日志目录
if [ ! -d ${log_path} ]; then
mkdir $log_path
fi
#当天的只保留一个压缩包
if [ -f ${today_logFile_path} ]; then
rm -f ${today_logFile_path}
fi
#压缩当日日志
zip -j ${today_logFile_path} ${current_path}/*.log
#清空今日日志
for i in `find ${current_path} -maxdepth 1 -name "*.log"`; do cat /dev/null > $i; done
cd ${log_path}
#只保留最后20份日志(todo: 优化成 rm -f !(排除文件))
index=1;
for file in `ls -t $log_path`
do
echo $file $index
if [ "$index" -gt 20 ]; then
rm -f $file
fi
let index++;
done
echo "日志备份成功"