阅读前提:有shell基础,有需要请查看上一篇文章
1、记一次部署多个springboot项目的通用shell,通过将变化内容转换为变量实现一个简单的通用,敏感内容已经屏蔽
#!/bin/sh
#部署路径
DEPLOY_DIR=/data/admin/app/
#服务名
SERVER=$1
ACTION=$2
function deploy_java() {
echo "start to deploy $1 ..."
SERVER_NAME=$1
JAR_NAME=$2
DO=$3
## 服务所在目录
SERVER_DIR=${DEPLOY_DIR}/${SERVER_NAME}
PID=$SERVER_NAME\.pid
case $DO in
start)
if [ ! -d "$SERVER_DIR" ];then
mkdir -p $SERVER_DIR
fi
##nohup & 以守护进程启动
cd $SERVER_DIR
nohup java -Xms256m -Xmx512m -jar $JAR_NAME >/dev/null 2>&1 &
echo $! > $SERVER_DIR/$PID
echo "=== start $SERVER_NAME"
;;
stop)
kill -9 `cat $SERVER_DIR/$PID`
rm -rf $SERVER_DIR/$PID
echo "=== stop $SERVICE_NAME"
## 停止5秒
sleep 5
##
P_ID=`ps -ef | grep -w "$SERVER_NAME" | grep -v "grep" | grep -v "java_deploy" | awk '{print $2}'`
echo "$SERVER_NAME 11111111 $P_ID"
if [ "$P_ID" == "" ]; then
echo "=== $SERVER_NAME process not exists or stop success"
else
echo "=== $SERVER_NAME process pid is:$P_ID"
echo "=== begin kill $SERVICE_NAME process, pid is:$P_ID"
#kill -9 $P_ID
fi
;;
restart)
deploy_java $SERVICE_NAME $JAR_NAME stop
sleep 2
deploy_java $SERVICE_NAME $JAR_NAME start
echo "=== restart $SERVICE_NAME"
;;
*)
## restart
deploy_java $SERVER_NAME $JAR_NAME stop
sleep 2
deploy_java $SERVER_NAME $JAR_NAME start
;;
esac
echo "deploy $server_name finish "
}
if [[ $ACTION == "start" ]] || [[ $ACTION == "stop" ]] || [[ $ACTION == "restart" ]] ;then
case $SERVER in
"server-1" )
deploy_java server-1 server-1-1.0.0.jar $ACTION
;;
"server-2" )
deploy_java server-2 server-2-1.0.0.jar $ACTION
;;
"server-3" )
deploy_java server-3 server-3-1.0.0.jar $ACTION
;;
* )
echo "invalid choice $service_name "
;;
esac
else
echo "invalid choice $ACTION"
fi
exit 0