关注JEECG发展历程 关注最新动态和版本, 记录JEECG成长点滴 更新日志 - 技术支持 - 招聘英才

JEECG最新版本下载 JEECG智能开发平台 - 显著提高开发效率 常见问题 - 入门视频 - 参与开源团队

商务QQ: 69893005、3102411850 商务热线(5*8小时): 010-64808099 官方邮箱: jeecgos@163.com

查看: 7430|回复: 3

升级微服务了,一个一个起包太麻烦,自己写了个一键启动

[复制链接]
发表于 2021-1-26 10:27:41 | 显示全部楼层 |阅读模式
之前只有一个包,简单写个脚本就好了,现在一次要5个包,就花了点时间写了个启动脚本。
可以做到以下功能:
一键启动、停止、重启、查看状态
可以对所有包进行操作
也可以对单独指定的包进行操作

起包的时候是一个一个起的,只有当排在前面的包启动成功,才会起下一个包,并且会输出pid,端口以及启动耗时,方便查看异常。

脚本上可以指定端口,可以指定配置文件,并可全局调整内存,当然你也可以对个别包进行设置。

自己也不是搞运维的,网上参考了很多,也查了很多文档,但还是有很多不足,比如起包的时候,虽然设置了变量,以便启动脚本可以复制黏贴,但确实不简洁,应该可以用数组+循环实现,还在研究。

如果大佬有更好的实现方式,也请指正
如下
(如果linux启动不了,大概率是格式的问题,用dos2unix转换一下即可)
  1. #!/bin/sh

  2. # 修改项目名称、端口列表、复制启动、停止脚本、修改all相关、修改help相关
  3. # 项目名称
  4. export proj_name=scrm
  5. export proj_version=2.4.0
  6. # 项目部署目录
  7. export projectDir=/www/java/jar/$proj_name/
  8. # 项目日志目录
  9. export logDir=/www/java/log/$proj_name/
  10. # 包的列表
  11. export GATE=$proj_name-cloud-gateway-$proj_version.jar
  12. export SYST=$proj_name-cloud-system-start-$proj_version.jar
  13. export DEMO=$proj_name-cloud-demo-$proj_version.jar
  14. export MINI=$proj_name-cloud-miniprogram-$proj_version.jar
  15. export OFFI=$proj_name-cloud-offiaccount-$proj_version.jar
  16. # 端口列表
  17. export GATE_port=9997
  18. export SYST_port=7010
  19. export DEMO_port=7011
  20. export MINI_port=7012
  21. export OFFI_port=7013
  22. # 启动参数
  23. export Xms=-Xms256m
  24. export Xmx=-Xmx512m
  25. export profileActive=prod
  26. # 这里的-x 参数判断${logDir}是否存在并且是否具有可执行权限
  27. if [ ! -x "${logDir}" ]; then
  28.   mkdir -p "${logDir}"
  29. fi

  30. case "$1" in

  31. help)
  32.   echo "这是$proj_name启动脚本,应优先启动网关GATE"
  33.   echo "JAR包目录为$projectDir"
  34.   echo -e "\033[32m可用的命令为:\033[0m"
  35.   echo -e "\033[32mstart|stop|restart|status \033[0m"
  36.   echo "--启动:start  :启动,如应用已启动,则仅输出应用状态,不重新启动"
  37.   echo "--停止:stop   :停止"
  38.   echo "--状态:status :查看应用状态"
  39.   echo "--重启:restart:重新启动"
  40.   echo "可启动的程序为:"
  41.   echo "--网关  :GATE:$GATE"
  42.   echo "--系统  :SYST:$SYST"
  43.   echo "--应用  :DEMO:$DEMO"
  44.   echo "--小程序:MINI:$MINI"
  45.   echo "--公众号:OFFI:$OFFI"
  46.   echo "可输入all,对所有应用进行操作,启动|重启时不要退出shell命令,直到系统提示启动成功"
  47.   echo "示例:"
  48.   echo -e "启动网关:\033[1m$0 start gate \033[0m"
  49.   echo -e "停止全部:\033[1m$0 stop all \033[0m"
  50.   echo -e "后台启动:\033[1m$0 start gate &\033[0m,此命令不应关闭宝塔终端或其他终端,否则会停止"
  51.   echo -e "后台启动:\033[1mnohup $0 start gate &\033[0m,此命令可以关闭宝塔终端或其他终端"
  52.   echo "程序的缩写大小写均可哈"
  53.   ;;

  54. start)
  55.   case "$2" in

  56.   gate | GATE)
  57.     JAR=$GATE
  58.     JAR_port=$GATE_port

  59.     count=$(ps -ef | grep ${JAR} | grep -v "grep" | wc -l)
  60.     if [ ${count} -lt 1 ]; then
  61.       cd ${projectDir}
  62.       start=$(date +%s)
  63.       nohup java $Xms $Xmx -Dfile.encoding=utf-8 -jar ${JAR} --spring.profiles.active=${profileActive} --server.port=${JAR_port} >${logDir}${JAR}_$(date +%Y-%m-%d_%H:%M:%S).log 2>&1 &
  64.       echo "$(date '+%Y-%m-%d %H:%M:%S') 启动 ${JAR} 程序 ... ..."
  65.       jarPid=$(lsof -i:${JAR_port} | grep "LISTEN" | awk '{print $2}')
  66.       until [ -n "$jarPid" ]; do
  67.         jarPid=$(lsof -i:${JAR_port} | grep "LISTEN" | awk '{print $2}')
  68.       done
  69.       end=$(date +%s)
  70.       time=$(echo $start $end | awk '{print $2-$1}')
  71.       echo -e "\033[32m$(date '+%Y-%m-%d %H:%M:%S') ${JAR} 启动成功,进程id: ${jarPid},耗时$time秒\033[0m"
  72.     else
  73.       jarPid=$(ps x | grep ${JAR} | grep -v grep | grep -v '${scriptName}' | awk '{print $1}')
  74.       echo -e "\033[31m已经存在 ${count} 个 ${JAR} 程序在运行,进程id: ${jarPid}\033[0m"

  75.     fi
  76.     ;;

  77.   demo | DEMO)
  78.     JAR=$DEMO
  79.     JAR_port=$DEMO_port

  80.     count=$(ps -ef | grep ${JAR} | grep -v "grep" | wc -l)
  81.     if [ ${count} -lt 1 ]; then
  82.       cd ${projectDir}
  83.       start=$(date +%s)
  84.       nohup java $Xms $Xmx -Dfile.encoding=utf-8 -jar ${JAR} --spring.profiles.active=${profileActive} --server.port=${JAR_port} >${logDir}${JAR}_$(date +%Y-%m-%d_%H:%M:%S).log 2>&1 &
  85.       echo "$(date '+%Y-%m-%d %H:%M:%S') 启动 ${JAR} 程序 ... ..."
  86.       jarPid=$(lsof -i:${JAR_port} | grep "LISTEN" | awk '{print $2}')
  87.       until [ -n "$jarPid" ]; do
  88.         jarPid=$(lsof -i:${JAR_port} | grep "LISTEN" | awk '{print $2}')
  89.       done
  90.       end=$(date +%s)
  91.       time=$(echo $start $end | awk '{print $2-$1}')
  92.       echo -e "\033[32m$(date '+%Y-%m-%d %H:%M:%S') ${JAR} 启动成功,进程id: ${jarPid},耗时$time秒\033[0m"
  93.     else
  94.       jarPid=$(ps x | grep ${JAR} | grep -v grep | grep -v '${scriptName}' | awk '{print $1}')
  95.       echo -e "\033[31m已经存在 ${count} 个 ${JAR} 程序在运行,进程id: ${jarPid}\033[0m"

  96.     fi
  97.     ;;

  98.   mini | MINI)
  99.     JAR=$MINI
  100.     JAR_port=$MINI_port

  101.     count=$(ps -ef | grep ${JAR} | grep -v "grep" | wc -l)
  102.     if [ ${count} -lt 1 ]; then
  103.       cd ${projectDir}
  104.       start=$(date +%s)
  105.       nohup java $Xms $Xmx -Dfile.encoding=utf-8 -jar ${JAR} --spring.profiles.active=${profileActive} --server.port=${JAR_port} >${logDir}${JAR}_$(date +%Y-%m-%d_%H:%M:%S).log 2>&1 &
  106.       echo "$(date '+%Y-%m-%d %H:%M:%S') 启动 ${JAR} 程序 ... ..."
  107.       jarPid=$(lsof -i:${JAR_port} | grep "LISTEN" | awk '{print $2}')
  108.       until [ -n "$jarPid" ]; do
  109.         jarPid=$(lsof -i:${JAR_port} | grep "LISTEN" | awk '{print $2}')
  110.       done
  111.       end=$(date +%s)
  112.       time=$(echo $start $end | awk '{print $2-$1}')
  113.       echo -e "\033[32m$(date '+%Y-%m-%d %H:%M:%S') ${JAR} 启动成功,进程id: ${jarPid},耗时$time秒\033[0m"
  114.     else
  115.       jarPid=$(ps x | grep ${JAR} | grep -v grep | grep -v '${scriptName}' | awk '{print $1}')
  116.       echo -e "\033[31m已经存在 ${count} 个 ${JAR} 程序在运行,进程id: ${jarPid}\033[0m"

  117.     fi
  118.     ;;

  119.   offi | OFFI)
  120.     JAR=$OFFI
  121.     JAR_port=$OFFI_port

  122.     count=$(ps -ef | grep ${JAR} | grep -v "grep" | wc -l)
  123.     if [ ${count} -lt 1 ]; then
  124.       cd ${projectDir}
  125.       start=$(date +%s)
  126.       nohup java $Xms $Xmx -Dfile.encoding=utf-8 -jar ${JAR} --spring.profiles.active=${profileActive} --server.port=${JAR_port} >${logDir}${JAR}_$(date +%Y-%m-%d_%H:%M:%S).log 2>&1 &
  127.       echo "$(date '+%Y-%m-%d %H:%M:%S') 启动 ${JAR} 程序 ... ..."
  128.       jarPid=$(lsof -i:${JAR_port} | grep "LISTEN" | awk '{print $2}')
  129.       until [ -n "$jarPid" ]; do
  130.         jarPid=$(lsof -i:${JAR_port} | grep "LISTEN" | awk '{print $2}')
  131.       done
  132.       end=$(date +%s)
  133.       time=$(echo $start $end | awk '{print $2-$1}')
  134.       echo -e "\033[32m$(date '+%Y-%m-%d %H:%M:%S') ${JAR} 启动成功,进程id: ${jarPid},耗时$time秒\033[0m"
  135.     else
  136.       jarPid=$(ps x | grep ${JAR} | grep -v grep | grep -v '${scriptName}' | awk '{print $1}')
  137.       echo -e "\033[31m已经存在 ${count} 个 ${JAR} 程序在运行,进程id: ${jarPid}\033[0m"

  138.     fi
  139.     ;;

  140.   syst | SYST)
  141.     JAR=$SYST
  142.     JAR_port=$SYST_port

  143.     count=$(ps -ef | grep ${JAR} | grep -v "grep" | wc -l)
  144.     if [ ${count} -lt 1 ]; then
  145.       cd ${projectDir}
  146.       start=$(date +%s)
  147.       nohup java $Xms $Xmx -Dfile.encoding=utf-8 -jar ${JAR} --spring.profiles.active=${profileActive} --server.port=${JAR_port} >${logDir}${JAR}_$(date +%Y-%m-%d_%H:%M:%S).log 2>&1 &
  148.       echo "$(date '+%Y-%m-%d %H:%M:%S') 启动 ${JAR} 程序 ... ..."
  149.       jarPid=$(lsof -i:${JAR_port} | grep "LISTEN" | awk '{print $2}')
  150.       until [ -n "$jarPid" ]; do
  151.         jarPid=$(lsof -i:${JAR_port} | grep "LISTEN" | awk '{print $2}')
  152.       done
  153.       end=$(date +%s)
  154.       time=$(echo $start $end | awk '{print $2-$1}')
  155.       echo -e "\033[32m$(date '+%Y-%m-%d %H:%M:%S') ${JAR} 启动成功,进程id: ${jarPid},耗时$time秒\033[0m"
  156.     else
  157.       jarPid=$(ps x | grep ${JAR} | grep -v grep | grep -v '${scriptName}' | awk '{print $1}')
  158.       echo -e "\033[31m已经存在 ${count} 个 ${JAR} 程序在运行,进程id: ${jarPid}\033[0m"

  159.     fi
  160.     ;;

  161.   all | ALL)
  162.     start1=$(date +%s)
  163.     $0 start GATE
  164.     $0 start SYST
  165.     $0 start DEMO
  166.     $0 start MINI
  167.     $0 start OFFI
  168.     end1=$(date +%s)
  169.     time1=$(echo $start1 $end1 | awk '{print $2-$1}')
  170.     echo -e "\033[32m$(date '+%Y-%m-%d %H:%M:%S') 所有程序均已启动,耗时共计$time1秒\033[0m"
  171.     ;;

  172.   esac
  173.   ;;

  174. stop)
  175.   case "$2" in

  176.   gate | GATE)
  177.     JAR=$GATE
  178.     P_ID=$(ps -ef | grep -w ${JAR} | grep -v "grep" | awk '{print $2}')
  179.     if [ "$P_ID" == "" ]; then
  180.       echo "$(date '+%Y-%m-%d %H:%M:%S') ${JAR} 并未运行"
  181.     else
  182.       kill -9 $P_ID
  183.       echo -e "\033[32m$(date '+%Y-%m-%d %H:%M:%S') ${JAR} 已成功停止\033[0m"
  184.     fi
  185.     ;;

  186.   demo | DEMO)
  187.     JAR=$DEMO
  188.     P_ID=$(ps -ef | grep -w ${JAR} | grep -v "grep" | awk '{print $2}')
  189.     if [ "$P_ID" == "" ]; then
  190.       echo "$(date '+%Y-%m-%d %H:%M:%S') ${JAR} 并未运行"
  191.     else
  192.       kill -9 $P_ID
  193.       echo -e "\033[32m$(date '+%Y-%m-%d %H:%M:%S') ${JAR} 已成功停止\033[0m"
  194.     fi
  195.     ;;

  196.   mini | MINI)
  197.     JAR=$MINI
  198.     P_ID=$(ps -ef | grep -w ${JAR} | grep -v "grep" | awk '{print $2}')
  199.     if [ "$P_ID" == "" ]; then
  200.       echo "$(date '+%Y-%m-%d %H:%M:%S') ${JAR} 并未运行"
  201.     else
  202.       kill -9 $P_ID
  203.       echo -e "\033[32m$(date '+%Y-%m-%d %H:%M:%S') ${JAR} 已成功停止\033[0m"
  204.     fi
  205.     ;;

  206.   offi | OFFI)
  207.     JAR=$OFFI
  208.     P_ID=$(ps -ef | grep -w ${JAR} | grep -v "grep" | awk '{print $2}')
  209.     if [ "$P_ID" == "" ]; then
  210.       echo "$(date '+%Y-%m-%d %H:%M:%S') ${JAR} 并未运行"
  211.     else
  212.       kill -9 $P_ID
  213.       echo -e "\033[32m$(date '+%Y-%m-%d %H:%M:%S') ${JAR} 已成功停止\033[0m"
  214.     fi
  215.     ;;

  216.   syst | SYST)
  217.     JAR=$SYST
  218.     P_ID=$(ps -ef | grep -w ${JAR} | grep -v "grep" | awk '{print $2}')
  219.     if [ "$P_ID" == "" ]; then
  220.       echo "$(date '+%Y-%m-%d %H:%M:%S') ${JAR} 并未运行"
  221.     else
  222.       kill -9 $P_ID
  223.       echo -e "\033[32m$(date '+%Y-%m-%d %H:%M:%S') ${JAR} 已成功停止\033[0m"
  224.     fi
  225.     ;;

  226.   all | ALL)
  227.     $0 stop GATE
  228.     $0 stop DEMO
  229.     $0 stop MINI
  230.     $0 stop OFFI
  231.     $0 stop SYST
  232.     echo -e "\033[32m$(date '+%Y-%m-%d %H:%M:%S') 所有程序均已关闭\033[0m"
  233.     ;;

  234.   esac
  235.   ;;

  236. status)
  237.   case "$2" in

  238.   gate | GATE)
  239.     JAR=$GATE
  240.     JAR_port=$GATE_port
  241.     P_ID=$(ps -ef | grep -w ${JAR} | grep -v "grep" | awk '{print $2}')
  242.     if [ "$P_ID" == "" ]; then
  243.       echo -e "\033[31m${JAR} 并未运行\033[0m"
  244.     else
  245.       echo -e "\033[32m${JAR} 正在运行,PID为${P_ID},端口号为${JAR_port}\033[0m"
  246.     fi
  247.     ;;

  248.   domo | DEMO)
  249.     JAR=$DEMO
  250.     JAR_port=$DEMO_port
  251.     P_ID=$(ps -ef | grep -w ${JAR} | grep -v "grep" | awk '{print $2}')
  252.     if [ "$P_ID" == "" ]; then
  253.       echo -e "\033[31m${JAR} 并未运行\033[0m"
  254.     else
  255.       echo -e "\033[32m${JAR} 正在运行,PID为${P_ID},端口号为${JAR_port}\033[0m"
  256.     fi
  257.     ;;

  258.   mini | MINI)
  259.     JAR=$MINI
  260.     JAR_port=$MINI_port
  261.     P_ID=$(ps -ef | grep -w ${JAR} | grep -v "grep" | awk '{print $2}')
  262.     if [ "$P_ID" == "" ]; then
  263.       echo -e "\033[31m${JAR} 并未运行\033[0m"
  264.     else
  265.       echo -e "\033[32m${JAR} 正在运行,PID为${P_ID},端口号为${JAR_port}\033[0m"
  266.     fi
  267.     ;;

  268.   offi | OFFI)
  269.     JAR=$OFFI
  270.     JAR_port=$OFFI_port
  271.     P_ID=$(ps -ef | grep -w ${JAR} | grep -v "grep" | awk '{print $2}')
  272.     if [ "$P_ID" == "" ]; then
  273.       echo -e "\033[31m${JAR} 并未运行\033[0m"
  274.     else
  275.       echo -e "\033[32m${JAR} 正在运行,PID为${P_ID},端口号为${JAR_port}\033[0m"
  276.     fi
  277.     ;;

  278.   syst | SYST)
  279.     JAR=$SYST
  280.     JAR_port=$SYST_port
  281.     P_ID=$(ps -ef | grep -w ${JAR} | grep -v "grep" | awk '{print $2}')
  282.     if [ "$P_ID" == "" ]; then
  283.       echo -e "\033[31m${JAR} 并未运行\033[0m"
  284.     else
  285.       echo -e "\033[32m${JAR} 正在运行,PID为${P_ID},端口号为${JAR_port}\033[0m"
  286.     fi
  287.     ;;

  288.   all | ALL)
  289.     $0 status GATE
  290.     $0 status DEMO
  291.     $0 status MINI
  292.     $0 status OFFI
  293.     $0 status SYST
  294.     ;;

  295.   esac
  296.   ;;

  297. restart)
  298.   $0 stop $2
  299.   sleep 2
  300.   $0 start $2
  301.   echo -e "\033[32m$(date '+%Y-%m-%d %H:%M:%S') 所有程序均已重启成功\033[0m"
  302.   ;;
  303. esac
复制代码
 楼主| 发表于 2021-1-26 12:58:50 | 显示全部楼层
本帖最后由 shiningwhh 于 2021-1-26 13:02 编辑

贴几张运行图片:
帮助命令:
1.jpg

查看应用状态:
微信截图_20210126125420.jpg

重启应用:
微信截图_20210126125802.png
发表于 2021-3-5 10:31:55 | 显示全部楼层
用docker-compose不就行了吗
发表于 2021-4-2 22:01:39 | 显示全部楼层
自己也不是搞运维的,网上参考了很多,上海快3也查了很多文档,但还是有很多不足,体彩排列5比如起包的时候,虽然设置了变量,以便启动脚本可以复制黏贴
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表