背景

  通过shell判断是否存在补丁更新,进行自动化的部署

代码

  1. #!/bin/sh
  2. #Edit:何彦霆
  3. #version:1.0. beta
  4.  
  5. #执行环境初始化
  6. source /hxspace/production/bin/setenv.sh
  7.  
  8. #变量说明
  9. #$-外部提供,日期补丁(格式要求BD_2017--)
  10. #Paths_Way-补丁存放目录
  11. #Tomcat_Way-tomcat中间件目录
  12. #Tomcat_Start_Way-tomcat中间件启动文件位置(加载so存在该限制,不能直接使用工程下的启动文件)
  13. #Env_Wabapp_Way-web应用目录
  14. #Env_Bus_Way-BUS工程目录
  15.  
  16. BD_Data=$
  17. Paths_Way="/mnt/patches"
  18. Tomcat_Way="/hxspace/production/server/apache-tomcat-8.5.9"
  19. Tomcat_Start_Way="/hxspace/production/bin"
  20. Env_Wabapp_Way="/hxspace/production/webroot"
  21. Env_Bus_Way="/hxspace/production/bus"
  22.  
  23. function Env_WEB_updata()
  24. {
  25. WEB_name=$
  26. WEB_way=$
  27.  
  28. #判断Mall_WEB组件更新
  29. if [ -d ./${WEB_name} ];then
  30.  
  31. echo "存在${WEB_name}补丁,准备进行${WEB_name}环境更新"
  32.  
  33. #down掉服务器tomcat
  34. sh ${Tomcat_Way}/bin/shutdown.sh
  35. sleep 5s
  36.  
  37. #清空部署启动目录下,WEB应用文件
  38. mkdir -p ${Env_Wabapp_Way}/${WEB_way}
  39. rm -rf ${Env_Wabapp_Way}/${WEB_way}/*
  40. cp -rf ${Paths_Way}/${BD_Data}/${WEB_name}/* ${Env_Wabapp_Way}/${WEB_way}
  41.  
  42. #启动WEB
  43. sh ${Tomcat_Start_Way}/tomcat_run.sh
  44. echo "Mall_WEB环境更新完成"
  45.  
  46. else
  47.  
  48. echo "${WEB_name}更新补丁不存在,${WEB_name}更新结束"
  49.  
  50. fi
  51.  
  52. }
  53.  
  54. function Env_BUS_updata()
  55. {
  56. BUS_name=$1
  57. BUS_port=$2
  58. BUS_way=$3
  59. echo ${BUS_name}
  60. echo ${BUS_port}
  61. echo ${BUS_way}
  62. #判断组件更新
  63. #if [ -d ./${BUS_name}* ];then
  64. result=`ls -l | grep ${BUS_name}*`
  65. #if [[ "$result" != "" ]];then
  66. if [ -d ./${result} ];then
  67.  
  68. echo "存在${BUS_name}补丁,准备进行${BUS_name}环境更新"
  69.  
  70. #判断Server 进程是否存在 - centos 使用判断监控PID
  71. Sc_Pid=`netstat -nlp | grep ${BUS_port} | awk '{print $7}' | awk -F "/" '{print $1}'`
  72.  
  73. #判断20025端口是否被监听,如果正在监听,kill
  74. if [ ! $Sc_Pid ]; then
  75.  
  76. echo "IS NULL"
  77.  
  78. else
  79.  
  80. echo "NOT NULL"
  81. kill -9 $Sc_Pid
  82.  
  83. fi
  84.  
  85. #拷贝壳子进行覆盖
  86. mkdir -p ${Env_Bus_Way}/${BUS_way}
  87. cp -rf './TBAServer(2.1.9.4)'/* ${Env_Bus_Way}/${BUS_way}
  88.  
  89. if [ -d ./${BUS_name}_conf ];then
  90.  
  91. echo "${BUS_name}_conf存在补丁,准备进行环境更新"
  92.  
  93. #清空部署启动目录下,Collect_bus_conf文件
  94. rm -rf ${Env_Bus_Way}/${BUS_way}/config.ini
  95. rm -rf ${Env_Bus_Way}/${BUS_way}/classes/*
  96. rm -rf ${Env_Bus_Way}/${BUS_way}/*.so
  97.  
  98. mkdir -p ${Env_Bus_Way}/${BUS_way}
  99. cp -rf ${Paths_Way}/${BD_Data}/${BUS_name}_conf/* ${Env_Bus_Way}/${BUS_way}
  100.  
  101. #启动bus-采用重启
  102. sh ${Env_Bus_Way}/${BUS_way}/restart.sh
  103. echo "${BUS_name}_conf补丁,更新完成"
  104.  
  105. else
  106.  
  107. echo "${BUS_name}_conf补丁不存在"
  108.  
  109. fi
  110.  
  111. if [ -d ./${BUS_name}_lib ];then
  112.  
  113. echo "${BUS_name}_lib存在补丁,准备进行环境更新"
  114.  
  115. #清空部署启动目录下,${BUS_name}_lib文件
  116. mkdir -p ${Env_Bus_Way}/${BUS_way}/lib
  117. rm -rf ${Env_Bus_Way}/${BUS_way}/lib/*
  118.  
  119. cp -rf ${Paths_Way}/${BD_Data}/${BUS_name}_lib/* ${Env_Bus_Way}/${BUS_way}/lib
  120.  
  121. #启动bus-采用重启
  122. sh ${Env_Bus_Way}/${BUS_way}/restart.sh
  123. echo "${BUS_name}_lib补丁,更新完成"
  124.  
  125. else
  126.  
  127. echo "${BUS_name}_lib补丁不存在"
  128.  
  129. fi
  130.  
  131. if [ -d ./${BUS_name}_classes ];then
  132.  
  133. echo "${BUS_name}_classes存在补丁,准备进行环境更新"
  134.  
  135. #清空部署启动目录下,${BUS_name}_classes文件
  136. #工程classes文件同配置文件classes同目录,才用覆盖的方式
  137. mkdir -p ${Env_Bus_Way}/${BUS_way}/classes
  138.  
  139. cp -rf ${Paths_Way}/${BD_Data}/${BUS_name}_classes/* ${Env_Bus_Way}/${BUS_way}/classes
  140.  
  141. #启动bus-采用重启
  142. sh ${Env_Bus_Way}/${BUS_way}/restart.sh
  143. echo "${BUS_name}_classes补丁,更新完成"
  144.  
  145. else
  146.  
  147. echo "${BUS_name}_classes补丁不存在"
  148.  
  149. fi
  150.  
  151. else
  152. echo "${BUS_name}无补丁"
  153. fi
  154. }
  155.  
  156. #切换至补丁目录
  157. cd ${Paths_Way}
  158.  
  159. #判断补丁目录下是否存在指定补丁
  160. if [ -d ./$BD_Data ];then
  161. echo "存在该补丁,准备进行环境更新"
  162. cd ./$BD_Data
  163. # BUS 更新,$1 - 补丁文件名 $2 - BUS监听端口 $3 BUS部署路径
  164. Env_BUS_updata HX_ChenDu_LC_Mall_bus_test 20025 mall_bus
  165.  
  166. Env_BUS_updata HX_ChenDu_LC_MallTimer_bus_test 20032 mall_timer
  167.  
  168. Env_BUS_updata HX_ChenDu_pmc_bus_test 20028 pmc_bus
  169.  
  170. Env_BUS_updata HX_ChenDu_pmc_Collect_bus_test 20042 collector_bus
  171.  
  172. #WEB更新,$1 - 补丁文件名 $2 - WEB部署路径
  173. Env_WEB_updata HX_ChenDu_LC_Mall_WEB_Linux_Test mall
  174.  
  175. #Env_WEB_updata HX_ChenDu_pmc_Collect_bus_test mkt
  176.  
  177. else
  178. echo "补丁不存在,更新结束"
  179. exit 0
  180. fi

自动通过目录标示判断是否存在该模块补丁,进行补丁的移动合并和更新

Linux通过shell执行自动化部署的更多相关文章

  1. shell脚本自动化部署服务

    shell脚本自动化部署 !/bin/bash #export PATH=$PATH:/export/maven/bin run_flag_dir="/data0/shell/deploy_ ...

  2. shell脚本自动化部署

    由于公司技术部团队较小,没有专门的运维团队,所以运维工作技术部承包了. 一.纯人工部署是这样的: 1. 本地打包:一般 maven clean package 2. 借助xftp上传到服务器对应目录 ...

  3. jenkins结合ansible用shell实现自动化部署和回滚

    最近用jenkins+gitlab+ansible做持续化集成,自动化部署和版本回滚.然而deploy plugin没能做到增量升级和回滚操作,折腾了很久决定自己写个脚本来简单实现. 环境: cent ...

  4. 登录linux时 shell执行顺序

    # .bash_history,.bash_logout,.bash_profile,.bashrc/etc/profile 全局.bash_history 记录当前登录用户历史操作的命令.bash_ ...

  5. linux下使用shell脚本自动化部署项目

    在Java开发项目时经常要把正在开发的项目发布到测试服务器中去测试,一般的话是要把项目先打成war包,然后把war包发布到服务器中,关闭服务器, 最后重新启动服务器,虽然这过程不是很繁琐,但如果是多个 ...

  6. jenkins+maven+Tomcat+shell构建自动化部署

    https://yq.aliyun.com/articles/685931 1.官网下载war包:jenkins本质上就是一个web应用,直接下载jenkins的war包通过tomcat运行即可.ht ...

  7. Shell脚本-自动化部署WEB

    #! /bin/ ] then echo "#### 参数有误,\$1:构建号必填" exit fi cd /root/workspace/xinya_erp/xinya_web ...

  8. Shell脚本-自动化部署反向代理、WEB、nfs

    部署nginx反向代理三个web服务,调度算法使用加权轮询(由于物理原因只开启两台服务器) AutoNginxNfsService.sh #/bin/bash systemctl status ngi ...

  9. shell脚本自动化部署XX的案例(附数组使用)

    #!/bin/sh #Auto Make install MFS Files # cat <<EOF ++++++++++++++++Welcome To Use Auto Install ...

随机推荐

  1. Hadoop SSH+IP、SSH+别名 免密登录配置

    1.为什么要进行 SSH 无密码验证配置? Hadoop运行过程中需要管理远端Hadoop守护进程,在Hadoop启动以后,NameNode是通过SSH(Secure Shell)来启动和停止各个Da ...

  2. 搭建rtmp直播流服务之3:java开发ffmpeg实现rtsp转rtmp并实现ffmpeg命令的接口化管理架构设计及代码实现

    上一篇文章简单介绍了java如何调用ffmpeg的命令:http://blog.csdn.net/eguid_1/article/details/51777716 上上一篇介绍了nginx-rtmp服 ...

  3. vue-router如何根据不同的用户给不同的权限

    闲聊: 小颖去年在上家公司用的vue1.0之前在做路由这块用的router.map,但是现在vue2.0里已经不能用了,所以之前解决权限问题的例子,小颖也参考不了呜呜 之前看一个美女写的:elemem ...

  4. thinkphp 单字母函数

    在ThinkPHP中有许多使用简便的单字母函数(即快捷方法),可以很方便开发者快速的调用,但是字母函数却不方便记忆,本文将所有的字母函数总结一下,以方便以后查找. 1.U() URL组装 支持不同UR ...

  5. js中年份、月份下拉框

    <select id="year" style="width: 100px;"></select> <select id=&quo ...

  6. 移动端响应式布局+rem+calc()

    1.媒体查询:@media only screen and (max-width: ) {},在最初做pc端时,使用各种媒体查询,因为pc的屏幕分辨率总共就几种,不嫌麻烦的重复使用类名.有很大的缺陷就 ...

  7. v9.5.2上传缩略图/附件提示“undefined”

    把phpcms\modules\attachment\attachments.php中将                        if(empty($this->userid)){改成  ...

  8. 在 Mac OS 上编译 FFmpeg

    本文转自:在 Mac OS 上编译 FFmpeg | www.samirchen.com 安装 Xcode 和 Command Line Tools 从 App Store 上安装 Xcode,并确保 ...

  9. Struts2 Action接收POST请求JSON数据及其实现解析

    一.认识JSON JSON是一种轻量级.基于文本.与语言无关的数据交换格式,可以用文本格式的形式来存储或表示结构化的数据. 二.POST请求与Content-Type: application/jso ...

  10. mysql show processlist