单台机器单个后台,怎么实现应用的不间断重启

线上的项目,尤其是小项目大多数后台都只有一个服务在跑。

每次发版本的时候都要在工作群里通知,非常的麻烦,用多实例又显得大材小用。
不妨试试我的方法。

总得思路就是再发布新版本的时候,启动两个服务,先把现在的请求转到新服务上去,然后启动新的代码,最后一步把流量切回来。

话不多说,上代码,如要使用需要修改路径,不能直接用。

#!/bin/bash
JAVA_OPTIONS_INITIAL=-Xms128M
JAVA_OPTIONS_MAX=-Xmx256M

BINPATH=$(cd `dirname $0`; pwd)
RUNPATH=$(cd `dirname $0`; pwd)/run
echo "当前工作目录 ${BINPATH}"
echo 当前运行目录 ${RUNPATH}


if [ $(ls ${BINPATH%/bin*}|grep .*.jar|wc -l) -gt 1 ] ;then
	echo “目录中含有多个jar文件”
	exit 0
fi

_JAR_KEYWORDS=$(ls ${BINPATH%/bin*}|grep .*.jar)
_JAR_MASTER_KEYWORDS=master_${_JAR_KEYWORDS}
_JAR_SLAVE_KEYWORDS=slave_${_JAR_KEYWORDS}
if [ "$_JAR_KEYWORDS" =  "" ] ;then
	echo “${BINPATH%/bin*}下未找到jar包!!”
	exit 0
fi

echo 开始进行灰度发布流程

MASTER_PID=$(lsof -i:9090 | awk 'NR>1{print $2}')

SLAVE_PID=$(lsof -i:9091 | awk 'NR>1{print $2}')

if [ -z "$SLAVE_PID" ]; then  
    echo "WAITING FOR PROCESS WITH PID: $SLAVE_PID TO START"  
else  
    echo "KILLING PROCESS WITH PID: $SLAVE_PID"  
    kill -9 $SLAVE_PID  
fi

echo 生成从服务文件
cp -rf $BINPATH/$_JAR_KEYWORDS $RUNPATH/$_JAR_SLAVE_KEYWORDS
nohup java -jar  $RUNPATH/$_JAR_SLAVE_KEYWORDS --server.port=9091  >log_slave  &


while ! lsof -i:9091 > /dev/null; do  
    echo "等待9091端口服务启动"  
    sleep 1  
done  
  
echo "9091端口服务启动成功"


echo 把9090上面的所有流量切到9091上面
iptables -t nat -A PREROUTING -p tcp --dport 9090 -j REDIRECT --to-port 9091

if [ -z "$MASTER_PID" ]; then
    echo "WAITING FOR PROCESS WITH PID: $MASTER_PID TO START"
else
    echo "KILLING PROCESS WITH PID: $MASTER_PID"
    kill -9 $MASTER_PID
fi

echo 生成主服务文件
cp -rf $BINPATH/$_JAR_KEYWORDS $RUNPATH/$_JAR_MASTER_KEYWORDS
nohup java -Xmx2000m -Xms1000m -jar  $RUNPATH/$_JAR_MASTER_KEYWORDS --server.port=9090  >log_master  &

while ! lsof -i:9090 > /dev/null; do
    echo "等待9090端口服务启动"
    sleep 1
done
echo "9090端口服务启动成功"


echo 把9091上面的所有流量切到9090上面
iptables -t nat -D PREROUTING -p tcp --dport 9090 -j REDIRECT --to-port 9091

echo 关掉从服务
kill -9 $(lsof -i:9091 | awk 'NR>1{print $2}')


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值