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"
---------------------------------------------------------------------------------------------------------------------------咸鱼
---------------------------------------采遍所有的坑,让别人无坑可踩---------------------------------------