centos7下启动springboot项目启动脚本(shell脚本)

前言:打包好的springboot项目,可以使用java -jar xxx.jar的方式启动。当出现多个springboot项目需要启动的时候,可以使用脚本启动的方式。这在springcloud项目的开发测试阶段尤为有用。以下展示启动脚本示例,过程中遇到的问题,以及相关的解决办法。

1、启动脚本


#!/bin/sh
export EUREKA=ruoyi-eureka-1.0.2-SNAPSHOT.jar
export CONFIG=ruoyi-config-1.0.2-SNAPSHOT.jar
export AUTH=ruoyi-auth-1.0.2-SNAPSHOT.jar
export SYS=ruoyi-system-1.0.2-SNAPSHOT.jar
export ACTIVITI=ruoyi-activiti-1.0.2-SNAPSHOT.jar
export EUREKA_port=9001
export CONFIG_port=9002
export AUTH_port=9004
export SYS_port=9005
export ACTIVITI_port=9006
case "$1" in
start)
        ## 启动eureka
        echo "--------eureka 开始启动--------------"
        nohup java -jar $EUREKA > log-eureka.file 2>&1 &
        EUREKA_pid=`lsof -i:$EUREKA_port|grep "LISTEN"|awk '{print $2}'`
        until [ -n "$EUREKA_pid" ]
            do
              EUREKA_pid=`lsof -i:$EUREKA_port|grep "LISTEN"|awk '{print $2}'`  
            done
        echo "EUREKA pid is $EUREKA_pid" 
        echo "--------eureka 启动成功--------------"
		
        ## 启动config
        echo "--------开始启动CONFIG---------------"
        nohup java -jar $CONFIG > log-config.file 2>&1 &
        CONFIG_pid=`lsof -i:$CONFIG_port|grep "LISTEN"|awk '{print $2}'` 
        until [ -n "$CONFIG_pid" ]
            do
              CONFIG_pid=`lsof -i:$CONFIG_port|grep "LISTEN"|awk '{print $2}'`  
            done
        echo "CONFIG pid is $CONFIG_pid"     
        echo "---------CONFIG 启动成功-----------"
		
        ## 启动auth
        echo "--------开始启动AUTH---------------"
        nohup java -jar $AUTH > log-auth.file 2>&1 &
        AUTH_pid=`lsof -i:$AUTH_port|grep "LISTEN"|awk '{print $2}'`
        until [ -n "$AUTH_pid" ]
            do
              AUTH_pid=`lsof -i:$AUTH_port|grep "LISTEN"|awk '{print $2}'`  
            done
        echo "AUTH pid is $AUTH_pid"    
        echo "---------AUTH 启动成功-----------"
		
        ## 启动system
        echo "--------开始启动system---------------"
        nohup java -jar $SYS > log-sys.file 2>&1 &
        SYS_pid=`lsof -i:$SYS_port|grep "LISTEN"|awk '{print $2}'`
        until [ -n "$SYS_pid" ]
            do
              SYS_pid=`lsof -i:$SYS_port|grep "LISTEN"|awk '{print $2}'`  
            done
        echo "SYS pid is $SYS_pid"     
        echo "---------system 启动成功-----------"
		
		## 启动ACTIVITI
        echo "--------开始启动启动ACTIVITI---------------"
        nohup java -jar $ACTIVITI > log-act.file 2>&1 &
        ACTIVITI_pid=`lsof -i:$ACTIVITI_port|grep "LISTEN"|awk '{print $2}'`
        until [ -n "$ACTIVITI_pid" ]
            do
              ACTIVITI_pid=`lsof -i:$ACTIVITI_port|grep "LISTEN"|awk '{print $2}'`  
            done
        echo "ACTIVITI pid is $ACTIVITI_pid"     
        echo "---------启动ACTIVITI启动成功-----------"
        echo "===全部启动成功==="
        ;;
stop)
        P_ID=`ps -ef | grep -w $EUREKA | grep -v "grep" | awk '{print $2}'`
        if [ "$P_ID" == "" ]; then
            echo "===EUREKA process not exists or stop success"
        else
            kill -9 $P_ID
            echo "EUREKA killed success"
        fi
		P_ID=`ps -ef | grep -w $CONFIG | grep -v "grep" | awk '{print $2}'`
        if [ "$P_ID" == "" ]; then
            echo "===CONFIG process not exists or stop success"
        else
            kill -9 $P_ID
            echo "CONFIG killed success"
        fi
		P_ID=`ps -ef | grep -w $AUTH | grep -v "grep" | awk '{print $2}'`
        if [ "$P_ID" == "" ]; then
            echo "===AUTH process not exists or stop success"
        else
            kill -9 $P_ID
            echo "AUTH killed success"
        fi
		P_ID=`ps -ef | grep -w $SYS | grep -v "grep" | awk '{print $2}'`
        if [ "$P_ID" == "" ]; then
            echo "===SYS process not exists or stop success"
        else
            kill -9 $P_ID
            echo "SYS killed success"
        fi
		
		P_ID=`ps -ef | grep -w $ACTIVITI | grep -v "grep" | awk '{print $2}'`
        if [ "$P_ID" == "" ]; then
            echo "===ACTIVITI process not exists or stop success"
        else
            kill -9 $P_ID
            echo "ACTIVITI killed success"
        fi
 
        echo "===stop success==="
        ;; 
restart)
        $0 stop
        sleep 2
        $0 start
        echo "===restart success==="
        ;;   
esac	
exit 0

假设上述启动脚本所在目录为:/usr/local/deploy,脚本名称为start-ruoyi.sh,启动命令为:(停止和重启命令类似)

cd /usr/local/deploy
sh start-ruoyi.sh start

2、遇到的问题

1)脚本运行错误:centos 运行shell 出现未预期的符号 `$’ \r’ ’ 附近有语法错误,未预期的文件结尾等
看上去是语法错误,或者换行符之类的问题,但实际原因是自己的文件是从windows里面拷贝到centos的,两种系统格式不一样。
解决方法如下:
(1)打开notepad++编辑.sh文件
(2)notepad++右下角将windows模式改为linux模式
在这里插入图片描述

2)指定端口被占用:centos关闭占用某个端口的应用程序
以关闭占用8080端口的应用程序为例
先输入netstat -lnp|grep 8080 找到该应用程序 编号 28937
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 28937/java
然后执行kill杀死该应用程序
kill -9 28937

3)在微服务启动过程中,上述shell文件,在微服务auth启动会出现报错:spring cloud config server—No instances found of configserver,原因是auth没有读取到spring cloud config服务的配置信息(原因可能是即便config server启动成功了,auth微服务也不能及时通过注册中心拿到配置)。关于该问题有经验的伙伴可以指导下。
解决办法:
(1) 分为2个shell,注册中心和配置中心一般不会频繁启停,单独写一个shell。其他业务类型的微服务写一个shell。
(2) 猜想也可以在auth微服务前设置一定等待时间,但未验证。

文章参考:
centos关闭占用某个端口的应用程序:https://blog.csdn.net/weixin_38992765/article/details/91979934
centos 运行脚本错误 centos 运行shell 出现未预期的符号 `$‘do\r’’ 附近有语法错误:
https://blog.csdn.net/lkwan123/article/details/79648852
springboot项目脚本启动命令:
https://segmentfault.com/a/1190000012030747

发布了18 篇原创文章 · 获赞 19 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/xujinggen/article/details/104442269
今日推荐