start.sh 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. #!/bin/bash
  2. #版本
  3. verson=7.2.2
  4. #要部署的分支
  5. branch=master
  6. #源文件存储目录
  7. source_dir=/opt/erp/source/api
  8. #程序运行时目录
  9. server_dir=/opt/erp/server
  10. mkdir -p $server_dir"/logs/"
  11. #要运行的api
  12. apis=("server")
  13. # 杀死进程
  14. killone(){
  15. ps -ef |grep java |grep $1 |grep -v 'grep'|awk '{print $2}' | xargs kill -9
  16. echo '停止'$1
  17. }
  18. # 启动程序
  19. startone(){
  20. nohup java -Xmx512m -Xms256m -Xss1024k -jar $1"-"$verson.jar > $server_dir"/logs/"$1".out" 2>&1 &
  21. echo '启动'$1
  22. }
  23. # 默认全部启动
  24. startall="yes"
  25. for api_name in ${apis[@]}
  26. do
  27. if [[ "$1" != "" && "$1" = $api_name && "$1" != "dontbuild" ]]
  28. then
  29. startall="no"
  30. break
  31. fi
  32. done
  33. echo "startall is "$startall
  34. if [[ "$startall" = "yes" ]]; then
  35. #杀死进程
  36. for api_name in ${apis[@]}
  37. do
  38. killone "$api_name"
  39. echo "$api_name stop success"
  40. done
  41. else
  42. killone "$1"
  43. fi
  44. #检测端口状态
  45. checkPort(){
  46. r=`netstat -ntlp | awk '{print $4}' | grep :$1`
  47. if [ "$r" == "" ]
  48. then
  49. return 0
  50. else
  51. return 1
  52. fi
  53. }
  54. if [ "$1" != "dontbuild" ]
  55. then
  56. #更新源码
  57. cd $source_dir
  58. git reset --hard $branch
  59. git pull
  60. rm -rf /opt/erp/source/api/module-erp/target
  61. mvn -T 1C clean install -DskipTests -f pom.xml
  62. rm -rf $server_dir"/*.jar"
  63. for api_name in ${apis[@]}
  64. do
  65. mv $source_dir"/"$api_name"/target/"$api_name"-"$verson.jar $server_dir
  66. done
  67. else
  68. echo "不构建,直接重启"
  69. fi
  70. cd $server_dir
  71. if [[ "$startall" == "yes" ]]; then
  72. for api_name in ${apis[@]}
  73. do
  74. startone "$api_name"
  75. done
  76. else
  77. startone "$1"
  78. fi
  79. #进度条
  80. progressBar(){
  81. label=('|' '/' '-' '\')
  82. per=$1
  83. ii=0
  84. str=''
  85. myTimes=$2
  86. text=$3
  87. let index=myTimes%4
  88. #拼接#字
  89. while [ $ii -le $per ]
  90. do
  91. str=#$str
  92. let ii++
  93. done
  94. printf "[%-100s]%d%% %s %s\r" $str $per ${label[$index]} $text
  95. if [[ $per == 100 ]]; then
  96. echo
  97. fi
  98. }
  99. #声明所有的服务和端口号,以便检测
  100. serviceMap["9999"]="server"
  101. totalPer=0
  102. #是否全部启动成功的标识
  103. all_is_ok=""
  104. last_text=''
  105. times=0
  106. processNum=0
  107. processItem=100/1 #七个任务中每个任务所占进度
  108. while :
  109. do
  110. all_is_ok="yes"
  111. progressBar $totalPer $times $last_text
  112. #100次检查一下
  113. checked=$(($times%100))
  114. if [[ $checked == 0 ]]; then
  115. for key in ${!serviceMap[*]};do
  116. checkPort "$key"
  117. started_result=`echo $?`
  118. if [ "$started_result" == "1" ]
  119. then
  120. processNum=$(($processNum+1))
  121. #每启动一个服务进度
  122. totalPer=$(($processNum*$processItem))
  123. #显示启动成功的程序
  124. printf "%-57s%57s\n" ${serviceMap[$key]} '已启动' | sed 's/[ ]/-/g'
  125. #将启动成功的服务移除掉
  126. unset serviceMap["$key"]
  127. fi
  128. done
  129. fi
  130. sleep 0.1
  131. let times++
  132. if [[ ${#serviceMap[*]} == 0 ]]; then
  133. progressBar 100 1 "全部启动完成"
  134. break
  135. fi
  136. done