shell脚本如何启动springboot项目

shell脚本启动springboot项目

Spring Boot项目启动

我们知道打包好的Spring Boot项目这样启动

1
java -jar -Dfile.encoding=utf-8 test-0.0.1-SNAPSHOT.jar

在linux中,常常使用nohup后台启动其他程序,Spring Boot项目使用nohup启动如下

1
nohup java -jar -Dfile.encoding=utf-8 test-0.0.1-SNAPSHOT.jar &

如果使用上面命令启动,注意这时候远程terminal要主动exit退出,不这样做系统可能会杀掉上面启动的进程

由于开发需要,需要频繁地更新项目,写了两个shell脚本启动和关闭项目

  • 启动项目脚本 start.sh
1
2
3
#!/bin/bash
cd project  # ccd2002-0.0.1-SNAPSHOT.jar所在目录
nohup java -Xms128m -Xmx256m -jar -Dfile.encoding=utf-8 ccd2002-0.0.1-SNAPSHOT.jar &
  • 关闭项目脚本
1
2
#!/bin/bash
sudo kill $(ps -aux | grep 'ccd2002' | awk 'NR==2{print $2}')

上面脚本使用ps命令查到ccd2002项目的信息,然后使用awk过滤信息获取项目pid,最后使用kill杀掉项目。

为了方便大家理解,下面分解

1
sudo kill $(ps -aux | grep 'ccd2002' | awk 'NR==2{print $2}')
1
ps -aux | grep 'ccd2002'

命令执行结果截图如下

1
ps -aux | grep 'test' | awk 'NR==2{print $2}'

命令取出上图中指出的pid

awk命令对ps结果进行处理,awk 'NR==2{print $2}'中的NR=2表示ps结果的第二行,$2表示行中的第二个元素

springboot项目linux简单的启动、停止、更新脚本sh

1.启动脚本

1
2
3
4
5
6
#!/bin/bash
#获取路径
basepath=$(cd $(dirname $0); pwd)
echo  "xxxxxx  启动开始............."
nohup java -jar  $basepath/xxxxxx.jar  --spring.profiles.active=prd >/dev/null 2>&1&
echo  "xxxxxx  启动成功............."

2.停止脚本

1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash
echo "xxxxxx    停止开始......."
ID=`ps -ef | grep "xxxxxx.jar" | grep -v "grep" | awk '{print $2}'`
echo $ID
for id in $ID
do
kill -9 $id
echo "killed $id"
done
sleep 5s
echo "xxxxxx    停止成功......."

3.版本升级脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#!/bin/bash
basepath=$(cd $(dirname $0); pwd)
echo "############################执行update.sh开始###########################"
echo "基础路径:$basepath"
echo "远程传递参数为:" ${1}
if [ -z ${1} ];then 
echo "工程名称参数传递为空,更新失败"
else
if [ -f "$basepath/../../deploy/${1}.jar" ];then
        echo "开始备份工程包"
        cp $basepath/${1}.jar  $basepath/../appBak/${1}.jar_$(date '+%Y-%m-%d-%H:%M:%S')
        echo "工程包备份成功"
        #停止应用    
        sh $basepath/stop.sh
        #开始删除老的工程包
        if [ -f "$basepath/${1}.jar" ];then
        rm $basepath/${1}.jar
        fi
        echo "开始更新工程包"
     mv $basepath/../../deploy/${1}.jar $basepath/${1}.jar
       if [ $? -eq 0 ];then
        #启动应用
        sh $basepath/start.sh
        else
          echo "工程包移动失败"
        fi
else
 echo "升级包不存在"
fi
fi
echo "############################执行update.sh结束###########################"

4、回滚脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/bin/bash
basepath=$(cd $(dirname $0); pwd)
echo "基础路径:$basepath"
packageName=$(cd ${basepath}'/../appBak'; ls -lrlt |grep $(date '+%Y-%m-%d') |head -n 1 |awk '{print $9}' )
echo "获取回滚包名称为:"$packageName
if [ -z $packageName ];then
   echo "回滚 "$1" 包不存在,回滚失败"
else
echo "远程传递参数为:"${1}
if [ -z ${1} ];then
echo "工程名称参数为空,回滚失败"
else
#将备份包还原在启动
cp $basepath/../appBak/$packageName $basepath/../../deploy/${1}.jar
if [ -f "$basepath/../../deploy/"${1}".jar" ];then
        #停止应用    
        sh $basepath/stop.sh
        if [ -f "$basepath/"${1}".jar" ];then
        #开始删除老的工程包
        rm $basepath/${1}.jar
        fi
        mv $basepath/../../deploy/${1}.jar $basepath/${1}.jar
        if [ $? -eq 0 ];then
         echo "回滚还原包成功"
        #启动应用
        sh $basepath/start.sh
        else
          echo  "工程包还原失败"
        fi
else
 echo "还原包不存在"
fi
fi
fi

5.远程发布脚本(前提配置免密登录)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#!/bin/bash
echo "******************************远程发布脚本***********************************************************"
echo " "
echo "********脚本参数 工程名称:支持 ddp-server、ddp-server-idxs、ddp-server-mdxs、ddp-server-ext、********"
echo "********ddp-server-task、dmsp-gateway 脚本类型:支持 update(更新脚本)/rollbak(回滚脚本)***************"
echo "*******将上述工程名对应的jar包放在 /opt/apps/deploy目录下********************************************"
echo "********在config.properties配置文件中,配置工程对应的服务器IP多台机器则以逗号(,)分隔。***************"
echo "********如 ddp-server=192.168.1.2,192.178.3.4 的形式配置工程对应的机器*******************************"
echo "*************执行脚本的方式如  sh deploy.sh ddp-server update  升级**********************************"
echo "*************执行脚本的方式如  sh deploy.sh ddp-server rollbak 回滚**********************************"
echo "  "
echo "******************************远程发布脚本***********************************************************"
echo "     "
echo "##############################开始校检参数############################################################"
if [ -z $1 ]||[ -z $2 ];then
echo " "
echo '参数不能为空,如: sh deploy.sh ddp-server update'
echo ""
echo "##############################参数校检失败############################################################"
else
echo " "
echo "##############################参数校检成功############################################################"
echo "    "
echo "#############################开始校检配置文件#########################################################"
echo "  "
path="/opt/apps/deploy"
echo "远程发布包的路径为:" $path
shellpath=""
if [ $1 == "ddp-server" ];then
 shellpath="/opt/apps/ddp/app"
elif [ $1 == "ddp-server-idxs" ];then
 shellpath="/opt/apps/ddp-idxs/app"
elif [ $1 == "ddp-server-mdxs" ]; then
 shellpath="/opt/apps/ddp-mdxs/app"
elif [ $1 == "ddp-server-ext" ]; then
  shellpath="/opt/apps/ddp-ext/app"
elif [ $1 == "ddp-server-task" ];then
  shellpath="/opt/apps/ddp-task/app"
elif [ $1 == "dmsp-gateway" ];then
  shellpath="/opt/apps/dmsp-gateway/app"
fi
echo "远程脚本路径为:"$shellpath
#工程模块名称
modle=$(cat config.properties |grep  $1"=" |awk -F '=' '{print $1}')
echo "工程名称为:"$modle
ips=$(cat config.properties |grep  $1"="|awk -F '=' '{print $2}')
echo 目标ip为:$ips
echo " "
if [ -z $modle ];then
echo "###########工程在配置文件(config.properties)中不存在,脚本执行终止#####################################"
elif [ -z $ips ]; then
echo "#############工程对应的目标机器ip在配置文件(config.properties)中不存在,脚本执行终止##################"
elif [ -z $shellpath ];then
echo "############################"$1"不支持远程操作,脚本执行终止##########################################"
elif [ $2 != 'update' ] && [ $2 != 'rollbak' ];then
echo "############################远程操作仅支持 update 或 rollbak,脚本执行终止############################"
else
echo "###################配置文件校检通过,开始更新或回滚操作###############################################"
OLD_IFS="$IFS"
IFS=","
#如下会自动分隔
arr=($ips)
#恢复原来的分隔符
IFS="$OLD_IFS"
#遍历数组
for ip in ${arr[@]}
do
 if [ $2 == 'update' ];then
  echo "     "
  echo "====================================================================================================="
  echo "++++++++++++++++++++++++++++++++++++"${ip}"开始执行更新操作++++++++++++++++++++++++++++++++"
  echo "     "
  echo "开始远程拷贝文件" ${modle}".jar 到机器ip为: "${ip} ${path}"的目录下"
   scp  -o ConnectTimeout=10 ${path}/${modle}.jar phfund@${ip}:${path}
  if [ $? -ne 0 ];then
      echo "远程拷贝"${modle}".jar 到 " ${ip} " 失败,本次更新失败"
      echo "  "
     echo "======================================================================================================"
  else
     echo "远程拷贝"  ${modle}".jar到" $ip "成功"
      ssh  -o ConnectTimeout=10  ${ip}   ' sh ' $shellpath'/'$2'.sh ' $1
      if [ $? -eq 0 ];then
      echo "     "
      echo "+++++++++++++++++++++++++++++++++++++++++++++"${ip}"更新成功+++++++++++++++++++++++++++"
      echo "================================================================================================="
      else
       echo "     "
       echo "+++++++++++++++++++++++++++++++++++++++++++++"${ip}"更新失败++++++++++++++++++++++++++"  
       echo "================================================================================================"
      fi
   fi
elif [ $2=='rollbak' ];then
      echo "     "
     echo "==================================================================================================="  
     echo "+++++++++++++++++++++++++++++++++++++++++++++++++++"${ip}"开始执行回滚操作++++++++++++++"
     echo "     "
     ssh  -o ConnectTimeout=10 ${ip}   ' sh '${shellpath}'/'$2'.sh ' $1
      if [ $? -ne 0 ];then
        echo "     "
        echo "+++++++++++++++++++++++++++++++++++++++++++++++"${ip}"回滚操作失败++++++++++++++++++++"   
         echo "==============================================================================================="
     else
        echo "     "
        echo "+++++++++++++++++++++++++++++++++++++++++++++"${ip}"回滚操作成功++++++++++++++++++++++"  
        echo "==============================================================================================="
        fi
fi
done
fi
fi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
#+++++++++++++++++脚本说明++++++++++++++++++++++++++++++
echo "******************************远程发布脚本说明***********************************************************************"
echo " "
echo "******************************脚本参数*******************************************************************************"
echo "**参数1 工程名称:支持 ddp-server、ddp-server-idxs、ddp-server-mdxs、ddp-server-extddp-server-task、dmsp-gateway ...**"
echo "**参数2 配置属性中对应工程的标识:支持 1,2,3...,当为 all 的时候取全部[1,2,3...]所对应的属性**************************"
echo "**参数3 执行的的脚本:支持 update(版本升级),rollbak(版本回滚),log(查看版本日志),start(启动),stop(停止),restart(重启)**"
echo "******************************脚本参数*******************************************************************************"
echo " "
echo "******************************升级版本的工程包放在 /opt/apps/deploy目录下********************************************"
echo "******************************在/opt/apps/ssh/config.properties配置文件中配置属性************************************"
echo "******************************工程ip如: ddp-server.1=ip**************************************************************"
echo "******************************工程日志路径如: ddp-server.logPath=/opt/apps/ddp/log/**********************************"
echo "******************************工程执行脚本路径如: ddp-server.shellPath=/opt/apps/ddp/app/****************************"
echo "  "
echo "*******************************执行方式(deploy.sh 参数1 参数2 参数3)*************************************************"
echo "*************执行脚本的方式如  deploy.sh ddp-server all update  升级所有的工程***************************************"
echo "*************执行脚本的方式如  deploy.sh ddp-server all rollbak 回滚所有的工程***************************************"
echo "*************执行脚本的方式如  deploy.sh ddp-server all stop    停止所有的工程***************************************"
echo "*************执行脚本的方式如  deploy.sh ddp-server all start   启动所有的工程***************************************"
echo "*************执行脚本的方式如  deploy.sh ddp-server all restart 重启所有的工程***************************************"
echo " "
echo "*************日志查看不支持all,只能够单独选择某一台日志查看**********************************************************"
echo "**************执行脚本的方式如 deploy.sh ddp-server 1 log 查看某台机器的工程日志*************************************"
echo "  "
echo "******************************远程发布脚本说明***********************************************************************"
echo "  "
#+++++++++++++++++脚本说明++++++++++++++++++++++++++++++
#+++++++++++++++++参数定义部分++++++++++++++++++++++++++
#参数一表示 工程名称
param1=$1
#参数二表示 配置文件中对应的属性,规则 1,2,3 分别取对应的参数,当为 all的时候取全部[1,2,3]的属性
param2=$2
#参数三表示 执行的的脚本支持update(版本升级),rollbak(版本回滚),log(查看版本日志),start(启动),stop(停止),restart(重启)
param3=$3
#工程包名称
packageName=$param1".jar"
#升级包路径
updatepath="/opt/apps/deploy"
#远程机器用户
userName="phfund"
#ip地址
IP=""
#日志路径
logPath=""
#脚本路径
shellPath=""
#config.properties配置文件路径
configPath="/opt/apps/ssh"
#+++++++++++++++++参数定义部分++++++++++++++++++++++++++
#+++++++++++++++++传递参数校检以及配置文件解析校检部分++++++++++
echo "**************************************开始校检传入参数*******************************************************************"
if [ -z $param1 ]||[ -z $param2 ]||[ -z $param3 ] ;then
echo " "
echo "参数不能为空如:(deploy.sh 参数1 参数2 参数3) 按照空格分隔"
echo " "
echo "**************************************传入参数校检失败*******************************************************************"
exit
fi
if [ "$param3" != "update" ]&&[ "$param3" != "restart" ]&&[ "$param3" != "stop" ]&&[ "$param3" != "start" ]&&[ "$param3" != "rollbak" ]&&[ "$param3" != "log" ];then
echo " "
echo "参数3只支持: update,restart,start,stop,rollbak,log"
echo " "
echo "**************************************传入参数校检失败*******************************************************************"
exit
else
   if [ "$param3" == "log" ]&&[ "$param2" == "all" ];then
echo " "
echo "查看系统日志只支持单个操作如:(deploy.sh ddp-server 1 log),参数2不支持all"
echo " "
echo "**************************************传入参数校检失败*******************************************************************"  
    exit
   fi
fi
echo " "
echo "**************************************传入参数校检成功*******************************************************************"
echo " "
echo "*****************************************开始解析config.properties配置文件***********************************************"
echo " "
if [ "$param2" == "all" ];then
  IP=$(cd ${configPath}; cat ./config.properties|grep ${param1}'.'|grep -v ${param1}'.logPath'|grep -v ${param1}'.shellPath'|awk -F '=' '{print $2}')
else
  IP=$(cd ${configPath};cat ./config.properties|grep ${param1}'.'${param2}|awk -F '=' '{print $2}')
fi
echo "获取工程名称为: "$param1 " IP地址: "$IP
 logPath=$(cd ${configPath}; cat ./config.properties|grep  ${param1}'.logPath'|awk -F '=' '{print $2}')
echo "获取工程日志路径为: "$logPath
 shellPath=$(cd ${configPath}; cat ./config.properties|grep  ${param1}'.shellPath'|awk -F '=' '{print $2}')
echo "获取工程执行脚本路径为: "$shellPath
echo " "
echo "**************************************解析config.properties配置文件结束***********************************************"
#+++++++++++++++++传递参数校检以及配置文件解析部分++++++++++
#+++++++++++++++++解析参数验证,以及执行调度部分++++++++++++
echo " "
echo "**************************************开始校检解析参数*****************************************************************"
if [ -z $IP ];then
echo ""
echo "获取工程的IP为空,终止程序"
echo " "
echo "**************************************解析参数校检失败*****************************************************************"
exit
fi
if [ -z $shellPath ];then
echo ""
echo "获取工程的执行脚本路径为空,终止程序"
echo " "
echo "**************************************解析参数校检失败*****************************************************************"
exit
fi
if [ "$param3" == "log" ]&&[ -z $logPath ];then
echo ""
echo "查看日志,获取工程的日志路径为空,终止程序"
echo " "
echo "**************************************解析参数校检失败*****************************************************************"
exit
fi
echo " "
echo "**************************************解析参数校检成功*****************************************************************"
#调度公共方法
function remotecall(){ 
    ssh  -o ConnectTimeout=10  ${ip}   'sh ' $shellPath'/'$param3'.sh ' $param1
#查看日志方法
function looklog(){
   ssh  -o ConnectTimeout=10  ${ip}   'sh ' $shellPath'/'$param3'.sh ' $param1 $logPath
}
#远程拷贝公共方法
function scpcall(){
    scp  -o ConnectTimeout=10 ${updatepath}/${packageName} ${userName}@${ip}:${updatepath}
}
for ip in $IP
do
if [ $param3 == 'update' ];then
echo " "
echo "====================================升级(update)操作执行开始==========================================================="
echo " "
   scpcall
 if [ $? -ne 0 ];then
   echo "远程拷贝"${packageName}" 到IP为" ${ip} "机器的 "${updatepath}" 目录下失败,本次升级失败"
 else
   echo "远程拷贝"${packageName}" 到IP为" $ip "机器的 "${updatepath}" 目录下成功,开始执行更新脚本"
   echo " "
   remotecall
   echo " "
   if [ $? -ne 0 ];then
     echo "机器IP为 "$ip "执行更新脚本失败"
   else
     echo "机器IP为 "$ip "执行更新脚本成功"
   fi
 fi
echo " "
echo "====================================升级(update)操作执行结束==========================================================="
elif [ $param3 == 'start' ];then
echo " "
echo "====================================启动(start)操作执行开始============================================================"
echo " "
remotecall
 if [ $? -ne 0 ];then
     echo "机器IP为 "$ip "执行启动脚本失败"
   else
     echo "机器IP为 "$ip "执行启动脚本成功"
   fi
echo " "
echo "====================================启动(start)操作执行结束============================================================"
elif [ $param3 == 'rollbak' ];then
echo " "
echo "===================================回滚(rollbak)操作执行开始============================================================"
echo " "
remotecall
 if [ $? -ne 0 ];then
     echo "机器IP为 "$ip "执行回滚脚本失败"
   else
     echo "机器IP为 "$ip "执行回滚脚本成功"
   fi
echo " "
echo "====================================回滚(rollbak)操作执行结束============================================================"
elif [ $param3 == 'stop' ];then
echo " "
echo "===================================停止(stop)操作执行开始============================================================"
echo " "
remotecall
 if [ $? -ne 0 ];then
     echo "机器IP为 "$ip "执行停止脚本失败"
   else
     echo "机器IP为 "$ip "执行停止脚本成功"
   fi
echo " "
echo "====================================停止(stop)操作执行结束============================================================"
elif [ $param3 == 'log' ];then
echo " "
echo "===================================查看日志(log)操作执行开始============================================================"
echo " "
 looklog
 if [ $? -ne 0 ];then
     echo "机器IP为 "$ip "执行日志查看脚本失败"
   else
     echo "机器IP为 "$ip "执行日志查看脚本成功"
   fi
echo " "
echo "====================================查看日志(log)操作执行结束============================================================"
elif [ $param3 == 'restart' ];then
echo " "
echo "======================================重启(restart)操作执行开始=========================================================="
echo " "
remotecall
 if [ $? -ne 0 ];then
     echo "机器IP为 "$ip "执行重启脚本失败"
   else
     echo "机器IP为 "$ip "执行重启脚本成功"
   fi
echo " "
echo "=====================================重启(restart)操作执行结束============================================================"
fi
done
#+++++++++++++++++解析参数验证,以及执行调度部分++++++++++++

优化版本入口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
#!/bin/bash
#+++++++++++++++++脚本说明++++++++++++++++++++++++++++++
help=$1
if [ "${help^^}" == "-HELP" ];then
echo "******************************远程发布脚本说明***********************************************************************"
echo " "
echo "******************************脚本参数*******************************************************************************"
echo "**参数1 工程名称:支持 ddp-server、ddp-server-idxs、ddp-server-mdxs、ddp-server-extddp-server-task、dmsp-gateway ...**"
echo "**参数2 执行的的脚本:支持 update(版本升级),rollbak(版本回滚),log(查看版本日志),start(启动),stop(停止),restart(重启)**"
echo "**参数3 配置属性中对应工程机器的标识:支持 ddp-server1,ddp-server2,ddp-server3...,当为 all 的时候取全部[ddp-server1,*"
echo "***************ddp-server2,ddp-server3.]所对应的属性*****************************************************************"
echo "******************************脚本参数*******************************************************************************"
echo " "
echo "******************************升级版本的工程包放在 /opt/apps/deploy目录下********************************************"
echo "******************************在/opt/apps/ssh/config.properties配置文件中配置属性************************************"
echo "******************************工程ip如: ddp-server.1=ip**************************************************************"
echo "******************************工程日志路径如: ddp-server.logPath=/opt/apps/ddp/log/**********************************"
echo "******************************工程执行脚本路径如: ddp-server.shellPath=/opt/apps/ddp/app/****************************"
echo "  "
echo "*******************************执行方式(deploy.sh 参数1 参数2 参数3)*************************************************"
echo "*************执行脚本的方式如  deploy.sh ddp-server  update all 升级所有的工程***************************************"
echo "*************执行脚本的方式如  deploy.sh ddp-server  rollbak all回滚所有的工程***************************************"
echo "*************执行脚本的方式如  deploy.sh ddp-server  stop all   停止所有的工程***************************************"
echo "*************执行脚本的方式如  deploy.sh ddp-server  start all  启动所有的工程***************************************"
echo "*************执行脚本的方式如  deploy.sh ddp-server restart all 重启所有的工程***************************************"
echo " "
echo "*************日志查看不支持all,只能够单独选择某一台日志查看**********************************************************"
echo "**************执行脚本的方式如 deploy.sh ddp-server log ddp-server1 查看某台机器的工程日志***************************"
echo " "
echo "*************脚本对应2个参数的语法,只支持以下语法查询 参数3 支持的个数**********************************************"
echo "**************查询某个工程对应的机器的标识如 deploy.sh 参数1 listserver 查看对应的机器参数个数***********************"
echo "  "
echo "******************************远程发布脚本说明***********************************************************************"
echo "  "
exit
fi
#+++++++++++++++++脚本说明++++++++++++++++++++++++++++++
#+++++++++++++++++参数定义部分++++++++++++++++++++++++++
#参数一表示 工程名称
param1=$1
#参数二表示 配置文件中对应的属性,规则 1,2,3 分别取对应的参数,当为 all的时候取全部[1,2,3]的属性
param2=$2
#参数三表示 执行的的脚本支持update(版本升级),rollbak(版本回滚),log(查看版本日志),start(启动),stop(停止),restart(重启)
param3=$3
#工程包名称
packageName=$param1".jar"
#升级包路径
updatepath="/opt/apps/deploy"
#远程机器用户
userName="phfund"
#ip地址
IP=""
#日志路径
logPath=""
#脚本路径
shellPath=""
#config.properties配置文件路径
configPath="/opt/apps/ssh"
#+++++++++++++++++参数定义部分++++++++++++++++++++++++++
#+++++++++++++++++传递参数校检以及配置文件解析校检部分++++++++++
if [ -z $param3 ]&&[ -n $param1 ] && [ -n $param2 ];then
 if [ "${param2^^}" == "LISTSERVER" ];then
  echo "**************************************获取工程所部署的机器(执行脚本参数3 可选的值)**************************************"
   list=$(cd ${configPath}; cat ./config.properties|grep "${param1}"[0-9]|awk -F '=' '{print $1}')
   echo "工程对应机器名称(参数3)可选值:" $list
  echo ""
  echo "**************************************获取工程所部署的机器(执行脚本参数3 可选的值)**************************************"
  exit
 fi
fi
echo "**************************************开始校检传入参数*******************************************************************"
if [ -z $param1 ]||[ -z $param2 ]||[ -z $param3 ] ;then
echo " "
echo "参数不能为空如:(deploy.sh 参数1 参数2 参数3) 按照空格分隔"
echo " "
echo "**************************************传入参数校检失败*******************************************************************"
exit
fi
if [ "$param2" != "update" ]&&[ "$param2" != "restart" ]&&[ "$param2" != "stop" ]&&[ "$param2" != "start" ]&&[ "$param2" != "rollbak" ]&&[ "$param2" != "log" ];then
echo " "
echo "参数2只支持: update,restart,start,stop,rollbak,log"
echo " "
echo "**************************************传入参数校检失败*******************************************************************"
exit
else
   if [ "$param2" == "log" ]&&[ "$param3" == "all" ];then
echo " "
echo "查看系统日志只支持单个操作如:(deploy.sh ddp-server log ddp-server1),参数3不支持all"
echo " "
echo "**************************************传入参数校检失败*******************************************************************"  
    exit
   fi
fi
echo " "
echo "**************************************传入参数校检成功*******************************************************************"
echo " "
echo "*****************************************开始解析config.properties配置文件***********************************************"
echo " "
if [ "$param3" == "all" ];then
  IP=$(cd ${configPath}; cat ./config.properties|grep "${param1}"[0-9]|awk -F '=' '{print $2}')
else
  IP=$(cd ${configPath};cat ./config.properties|grep ${param3}"="|awk -F '=' '{print $2}')
fi
echo "获取工程名称为: "$param1 " IP地址: "$IP
 logPath=$(cd ${configPath}; cat ./config.properties|grep  ${param1}'.logPath'|awk -F '=' '{print $2}')
echo "获取工程日志路径为: "$logPath
 shellPath=$(cd ${configPath}; cat ./config.properties|grep  ${param1}'.shellPath'|awk -F '=' '{print $2}')
echo "获取工程执行脚本路径为: "$shellPath
echo " "
echo "**************************************解析config.properties配置文件结束***********************************************"
#+++++++++++++++++传递参数校检以及配置文件解析部分++++++++++
#+++++++++++++++++解析参数验证,以及执行调度部分++++++++++++
echo " "
echo "**************************************开始校检解析参数*****************************************************************"
if [ -z "$IP" ];then
echo ""
echo "获取工程的IP为空,终止程序"
echo " "
echo "**************************************解析参数校检失败*****************************************************************"
exit
fi
if [ -z $shellPath ];then
echo ""
echo "获取工程的执行脚本路径为空,终止程序"
echo " "
echo "**************************************解析参数校检失败*****************************************************************"
exit
fi
if [ "$param2" == "log" ]&&[ -z $logPath ];then
echo ""
echo "查看日志,获取工程的日志路径为空,终止程序"
echo " "
echo "**************************************解析参数校检失败*****************************************************************"
exit
fi
echo " "
echo "**************************************解析参数校检成功*****************************************************************"
#将变量传递到子脚本
export updatepath
export packageName
export userName
export shellPath
export param2
export param1
export logPath
for ip in $IP
do
export ip
if [ $param2 == 'update' ];then
#执行更新脚本
sh update.sh
elif [ $param2 == 'start' ];then
#执行启动脚本
sh start.sh
elif [ $param2 == 'rollbak' ];then
#执行回滚脚本
sh rollbak.sh
elif [ $param2 == 'stop' ];then
#执行停止脚本
sh stop.sh
elif [ $param2 == 'log' ];then
#执行日志查看
sh log.sh
elif [ $param2 == 'restart' ];then
#执行重启脚本
sh restart.sh
fi
done
#+++++++++++++++++解析参数验证,以及执行调度部分++++++++++++

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持IT俱乐部。

本文收集自网络,不代表IT俱乐部立场,转载请注明出处。https://www.2it.club/server/linux/9094.html
上一篇
下一篇
联系我们

联系我们

在线咨询: QQ交谈

邮箱: 1120393934@qq.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部