运用inotify实现springboot项目自动更新部署

       把war包提交到tomcat下的webapps目录,tomcat就会自动帮你运行,当你上传新版本war到webapps时候。同样也会自动帮你更新,非常的方便。
       虽然使用springboot就可以直接使用jar包的方式直接运行项目,免去了云服务器还需要额外安装tomcat等服务的麻烦。但是,当你把新版本的,jar项目上传到服务器把原来的.jar替换,会发现并没有自动帮我们重启项目,换句话说你还需要先shutdown项目,再来java -jar运行,是不是感觉有些麻烦。我们能不能像tomcat的webapps那样子呢?下面就说说我的方法。请结合之前一篇《springboot项目的优雅关闭方式》https://blog.csdn.net/XlxfyzsFdblj/article/details/82054744来看效果会更好。
先安装inotify
参考博客 https://blog.csdn.net/onlyForCloud/article/details/47024315
编写inotify.sh,./inotify.sh &在后台运用即可

#!/bin/bash

# 项目运行位置,上传位置为/usr/local/work/finalab/webapps
path=/usr/local/work/finalab
message=
while true
do
        message=$(/usr/local/bin/inotifywait -e modify,create /usr/local/work/finalab/webapps/)
        echo $message
        # 意思就是如果message含有CREATE字符串或者含有MODIFT字符串就为true
        if [[ $message == *CREATE* || $message == *MODIFY* ]]; then
                # 如果该端口号还存在项目,则先需要安全停止项目
                PORT=$(netstat -ntulp | grep 12580)
                if [[ -n $PORT ]]; then
                        echo $(curl -X POST http://127.0.0.1:12581/MyActuator/shutdown)
                        sleep 4 
                fi
                # 删除老版本项目
                rm -rf ${path}"/finalab.jar"
                # 监听scp方法,因为在服务器外面,我是用scp来上传项目到服务器的
                message=$(ps aux | grep scp | grep -v grep)
                # 如果有则说明外面正在上传项目
                while [[ $message = *scp* ]]; do
                        # 为了保证项目正常上传完后才开启项目,这里需要sleep
                        sleep 4
                        message=$(ps aux | grep scp | grep -v grep)
                done
                # 把上传位置的项目,复制到原来运行老版本的项目的位置。
                scp ${path}"/webapps/finalab.jar" ${path}/
                sleep 1
                message=
                # 开启项目
                ./run.sh
        fi
done

run.sh shell代码

#!/bin/bash
PORT=$(netstat -ntulp | grep 12580)
# 如果PORT不为空说明有程序占用该端口号
if [[ -n $PORT ]]; then
        echo "The server is open, ready to close"
        RESULT="000"
        while [[ $RESULT == "000" ]]; do
                echo "Closing down ..."
                # 优雅关闭springboot项目
                RESULT=$(curl -X POST 127.0.0.1:12581/MyActuator/shutdown)
                sleep 2
        done
        echo "Close off success"
fi
echo "Being started ..."
# 开启项目
/usr/local/work/finalab/jdk-10.0.2/bin/java -jar /usr/local/work/finalab/finalab.jar > log.info 2>log.error &

猜你喜欢

转载自blog.csdn.net/XlxfyzsFdblj/article/details/82110034