shell脚本编写--jar包结合数据库同启动

1.要求

(1).数据库启动,后端服务启动

(2).数据库关闭,后端服务关闭

(3)意外的用途:  更新后端服务的时候,直接上传jar包到其他目录,然后移走原运行的文件,替换上新的jar包 ,自己就可以运行拉~~~~

2.初步脚本

#!/bin/bash
function print_info_log(){
    echo -e "\e[1;35m INFO:$(date "+%Y-%m-%d %H:%M:%S") \e[0m $1." 
}
function jar_pid_cmd(){
    jar_pid=`ps -ef|grep eli-main-1.0|grep -v grep|awk '{print $2}'`
    pid=$(ps -ef | awk '($(NF-4) ~ "eli-main-1.0-SNAPSHOT" ) {print $2  }')
    kill -9 $jar_pid
}

function jar_start_cmd(){
start_jar="nohup java -jar /usr/local/springboot_eli/eli-main-1.0-SNAPSHOT.jar -Xms1024m -Xms3072m -XX:PermSize=512m -XX:MaxPermSize=1024m -XX:MaxNewSize=1024m  --spring.profiles.active=eli  --spring.config.additional-location=/usr/local/springboot_eli/  >>/usr/local/springboot_eli/eli.out 2>&1 & "
echo "$start_jar" | bash  &>/dev/null
}


#死循环
aaaaa=1
while [  $aaaaa -eq 1 ]
do
    mysql_status=`netstat -tnlp|grep 3306|wc -l`
    jar_status=`ps -ef|grep eli-main-1.0|grep -v grep  |wc -l`
    
#检测数据库关闭,获取jar包运行状态,运行的进行关闭
if [ $mysql_status -eq 0 ];then
    [ $jar_status -ne 0 ] && jar_pid_cmd || print_info_log "已关闭" 
fi

#检测数据库开启,获取jar包运行状态,未运行的进行启动
if [ $mysql_status -eq 1 ];then
    [ $jar_status -eq 0 ] &&  jar_start_cmd  ||print_info_log "已启动" 
fi

    sleep 5
    #结束死循环
    #aaaaa=2
done

3.优化脚本

#!/bin/bash
# -----------------------------------------------------------------
# -------- 创建日期:2022-01                               --------
# -------- 作者:ywjia                                     --------
# -------- 邮箱:duxingren201955@163.com                   --------
# -----------------------------------------------------------------

#jar的名称
jar_name="eli-main-1.0-SNAPSHOT.jar"
#指定运行的绝对路径
jar_running_path="/usr/local/springboot_eli"
#jar包外部配置文件目录。        运行方式 单纯jar包运行  或者 加载外部配置文件 。外部配置文件建议和jar包同目录
jar_config_path="/usr/local/springboot_eli"
#配置文件后缀
jar_config_name="eli"
#生成日志文件路径
jar_logfile_path="/usr/local/springboot_eli"
#生成日志文件名称
jar_logfile_name="eli.out"
#死循环间隔秒数
sec="5"

#打印log日志
function Print_info_log() {
    echo -e "\e[1;35m INFO:$(date "+%Y-%m-%d %H:%M:%S") \e[0m $1."
}

#jar包启动命令 不加载外部配置即可删除这部分 "--spring.profiles.active=${jar_config_name} --spring.config.additional-location=${jar_config_path}/"
function Jar_Start() {
    start_jar="nohup java -jar ${jar_running_path}/${jar_name} -Xms1024m -Xms3072m  --spring.profiles.active=${jar_config_name}  --spring.config.additional-location=${jar_config_path}/  >>${jar_logfile_path}/${jar_logfile_name} 2>&1 & "
    echo "$start_jar" | bash &>/dev/null
}

#主函数执行
function main() {

    while true; do
        mysql_pid=$(ps -ef | awk '($(NF-1) ~ "mysql.sock") {print $2}')
        jar_pid=$(ps -ef | awk '($(NF-4) ~ "'$jar_name'" ) {print $2  }')

        if [ ! $mysql_pid ]; then
            [ $jar_pid ] && kill -9 $jar_pid || Print_info_log "数据库关闭状态,后端服务已同步关闭"
        else
            [ ! $jar_pid ] && Jar_Start || Print_info_log "数据库开启状态,后端服务已同步开启"
        fi
        sleep $sec
    done

}

#------------start---------
Print_info_log "开始进入死循环,每 $sec 秒进行一次检测。数据库启动,后端服务启动。数据库关闭,后端服务关闭"
main
Print_info_log "永远不会执行到这一步"
#------------end-----------

 

当然也可以这样。不过 变量输入会增加不可控性。个人比较喜欢稳妥一点。

#!/bin/bash
# -----------------------------------------------------------------
# -------- 创建日期:2022-01                               --------
# -------- 作者:ywjia                                     --------
# -------- 邮箱:duxingren201955@163.com                   --------
#指定运行的绝对路径
jar_running_path="$1"
#jar的名称
jar_name="$2"
#配置文件后缀
jar_config_name="$3"
#jar包外部配置文件目录。
jar_config_path="$4"
#生成日志文件路径
jar_logfile_path="$5"
#生成日志文件名称
jar_logfile_name="$6"
#死循环间隔秒数
sec="7"

#打印log日志
function Print_info_log() {
    echo -e "\e[1;35m INFO:$(date "+%Y-%m-%d %H:%M:%S") \e[0m $1."
}
#jar包启动命令 不加载外部配置即可删除这部分 "--spring.profiles.active=${jar_config_name} --spring.config.additional-location=${jar_config_path}/"
function Jar_Start() {
    start_jar="nohup java -jar ${jar_running_path}/${jar_name} -Xms1024m -Xms3072m  --spring.profiles.active=${jar_config_name}  --spring.config.additional-location=${jar_config_path}/  >>${jar_logfile_path}/${jar_logfile_name} 2>&1 & "
    echo "$start_jar" | bash &>/dev/null
}
while true; do
    mysql_pid=$(ps -ef | awk '($(NF-1) ~ "mysql.sock") {print $2}')
    jar_pid=$(ps -ef | awk '($(NF-4) ~ "'$jar_name'" ) {print $2  }')

    if [ ! $mysql_pid ]; then
        [ $jar_pid ] && kill -9 $jar_pid || Print_info_log "数据库关闭状态,后端服务已同步关闭"
    else
        [ ! $jar_pid ] && Jar_Start "$jar_running_path" "$jar_name" "$jar_config_name" "$jar_config_path" "$jar_logfile_path" "$jar_logfile_name" || Print_info_log "数据库开启状态,后端服务已同步开启"
    fi
    sleep $sec
done
sh check_mysql_start_jar.sh "/usr/local/springboot_eli" "eli-main-1.0-SNAPSHOT.jar" "eli" "/usr/local/springboot_eli" "/usr/local/springboot_eli" "eli.out" "5"

---------------------------------------------------------------------------------------------------------------------------咸鱼

---------------------------------------采遍所有的坑,让别人无坑可踩---------------------------------------