采用替换jar包启动方式:如sdzk-backend-2.0.jar 将运行sdzk-backend-2.0_function.jar
方法说明:
init 创建初始目录(back logs)第一次运行前执行或自行创建对应目录
restart 重启(备份并替换新的jar包)
stop 停止 status 运行状态
start 重启
autostart加入linux定时任务防止jar包异常停止
remoteRestart 远程主机启动
remoteAllRestart 远程和本地全部启动 (现在只支持远程一台服务器启动)
获取进程id有两种方式:
按端口获取如8081
netstat -tunlp | grep 8081 | awk '{print $7}'|tr -cd "[0-9]"
按名称获取collector-2.0-fat.jar
/root/jdk1.8.0_172/bin/jps -l| awk '{print $2,$1}'|grep -i '^collector-2.0-fat.jar'|awk '{print $2}'
`ps -ef |grep java|grep collector-2.0-fat.jar|awk '{print $2}'`
脚本使用,按情况替换以下三个变量即可使用
functionEnv 运行profile文件
oprationAdress 运行地址
project jar包名称
#!/bin/sh
if [ "$1" = "" ];
then
echo -e "请输入操作: {init|start|autostart|stop|restart|status|remoteRestart|remoteAllRestart}"
exit
fi
functionflag=_function
functionEnv=154
project=sdzk-backend-2.0.jar
originalProject=${project%.jar}${functionflag}.jar
oprationAdress=/root/api/
back=${oprationAdress}back/
logs=${oprationAdress}logs/
remoteIp=47.113.188.227
params2=$2
cd ${oprationAdress}
#pid=$(jps -l| awk '{print $2,$1}'|grep -i '^'${originalProject}|awk '{print $2}')
pid=`ps -ef |grep java|grep ${originalProject}|awk '{print $2}'`
stop(){
if [ "$pid" = "" ]; then
echo "no Start"
else
echo "shutdown ${project} begin"
kill -9 $pid
sleep 10
echo "shutdown ${project} end"
fi
}
star(){
if [ ! -f $originalProject ];then
echo "not exists jar not start"
fi
if [ ! -z "$params2" ];then
functionEnv=$params2
fi
echo "function env: "${functionEnv}
echo $pid
nohup java -jar -Xms256m -Xmx2048m $originalProject --spring.profiles.active=${functionEnv} >/dev/null 2>&1 &
echo $!
}
status(){
if [ "$pid" = "" ]; then
echo "no start"
else
echo $pid
fi
}
autostart(){
if [ "$pid" = "" ]; then
star
fi
}
start(){
stop
star
}
restart(){
if [ ! -f $project ];then
echo " no exist jar"
exit
else
echo "exist jar restart"
fi
backups
stop
mv $project $originalProject
echo "replace jar"
if [ $? -ne 0 ]; then
echo "failed"
else
star
fi
}
backups(){
if [ -f $originalProject ];then
cp $originalProject $back${originalProject%''${functionflag}*}_$(date +%Y%m%d_%H:%M:%S)_back.jar
echo "jar backup"
fi
}
remoteRestart(){
scp -rp ${oprationAdress}${project} $remoteIp:${oprationAdress}
ssh $remoteIp "$0 restart"
}
remoteAllRestart(){
remoteRestart
restart
}
init(){
if [ -d $back ];then
echo "exist ${back}"
else
mkdir $back
echo "create ${back}"
fi
if [ -d $logs ];then
echo "exist ${logs}"
else
mkdir $logs
echo "create ${logs}"
fi
}
case "$1" in
"start")
start
;;
"stop")
stop
;;
"status")
status
;;
"restart")
restart
;;
"remoteRestart")
remoteRestart
;;
"remoteAllRestart")
remoteAllRestart
;;
"autostart")
autostart
;;
"init")
init
;;
*)
usage
;;
esac
清除需要加入到定时器 清除jar包备份和日志文件两种方式
#!/bin/bash
SERVERS=(/root/api/back/ /data/backend-api-2.0/)
for i in ${SERVERS[@]}
do
echo "--"$i
find $i -mtime +30 -exec rm -rf {} \;
done
#!/bin/sh
cd /root/collector/collector_back
currentTime=$(date +%Y%m%d)
for shname in `ls collector-2.0-fat_*_back.jar`
do
name=${shname:18:8}
beforeTime=$(date -d"10 day $name" +%Y%m%d)
let value=$beforeTime-$currentTime
if [ $value -lt 0 ];then
echo "delete file :"$shname
rm -f $shname
else
echo $shname
fi
done
cd /root/collector/logs
for logname in `ls lsp_app.log.*`
do
logTime=${logname:12:8}
logBTime=$(date -d"2 day $logTime" +%Y%m%d)
let logValue=$logBTime-$currentTime
if [ $logValue -lt 0 ];then
echo "delete log :"$logname
rm -f $logname
else
echo $logname
fi
done
cd /root/collector
echo "" > /root/collector/nohup.out
windows 清除日志脚本
set srcDir="D:\ideaWorkspace\bjsdzk-collector\logs"
set daysAgo=1
forfiles /p %srcDir% /s /m lsp_*.log /d -%daysAgo% /c "cmd /c del @path"