服务器中开两个tomcat, 一个用来测试,一个用来生产,前端用nginx代理。新包用测试域名在测试tomcat上测试,测试完后停止测试用tomcat,修改配置文件成生产服务的配置,启动测试用tomcat,停止生产用tomcat,同步生成用数据库到测试用数据,nginx中把生产用域名后端指向测试用tomcat,完成测试用tomcat到生产用tomcat的切换。下次新版本测试用原来的生产用tomcat。
1 #!/usr/bin/bash
2
3 path_tomcat[1]=/usr/local/java/tomcat
4 path_tomcat[2]=/usr/local/java/tomcat2
5 port_tomcat[1]=tomcat1
6 port_tomcat[2]=tomcat2
7 nginx_conf_file1=/etc/nginx/conf.d/xxxx1.conf
8 nginx_conf_file2=/etc/nginx/conf.d/xxxx2.conf
9 db_name[1]=xxxxx
10 db_name[2]=xxxxx1
11 db_backup_fold=/xxxx/work_dir/old
12 db_user= ewrwk
13 db_update_sql=/xxxx/work_dir/new/sql/update.sql
14
15 # function to stop tomcat, one variable should given, for example 1, 2
16 function stop_tomcat()
17 {
18 tomcat_pid=$(ps aux | grep ${path_tomcat[$1]}/conf | sed '/ grep /d' | awk '{print $2}')
19 if [ -z "$tomcat_pid" ];then
20 echo "The tomcat you want to stop is not running!"
21 return 0
22 fi
23
24 ${path_tomcat[$1]}/bin/shutdown.sh
25 for ((i=1; i<=8; i++))
26 do
27 if pgrep java | grep "$tomcat_pid";then
28 if [ "$i" -eq 8 ]; then
29 echo "Killing tomcat ..."
30 kill -9 "$tomcat_pid"
31 sleep 1s
32 else
33 sleep 1s
34 fi
35 else
36 break
37 fi
38 done
39 if pgrep java | grep "$tomcat_pid";then
40 echo "Can't stop tomcat, check it yourself!"
41 exit 1
42 else
43 echo "Successfully stop tomcat!"
44 fi
45 }
46
47 function change_tomcat_to_tomcat()
48 {
49 if [ "$#" -ne 2 ];then
50 echo "Variable number must be 2!"
51 exit 1
52 fi
53 # get java pid runing producting tomcat
54 tomcat_pid=$(ps aux | grep ${path_tomcat[$1]}/conf | sed '/ grep /d' | awk '{print $2}')
55 if [ -z "$tomcat_pid" ];then
56 echo -n "${path_tomcat[$1]} was not runing! should continue? yes/no: "
57 read confirm
58 if [ "$confirm" != "y" ];then
59 echo "exiting!"
60 exit 1
61 fi
62 else
63 echo "Stoping New tomcat ... "
64 stop_tomcat $2
65 echo "Stop old tomcat ..."
66 stop_tomcat $1
67
68 fi
69
70 # try to shutdown producting tomcat
71 set -e
72
73 # backup data base and build new data base and execute database update
74 db_backup_name=${db_name[$1]}_$(date +%Y%m%d%H%M).sql
75 echo "Backup database ..."
76 pg_dump -U postgres -c ${db_name[$1]} > $db_backup_fold/$db_backup_name
77 echo "Restarting postgresql"
78 systemctl restart postgresql
79 echo "Droping database ..."
80 su - postgres -c "dropdb ${db_name[$2]}"
81 echo "Creating database ..."
82 su - postgres -c "createdb ${db_name[$2]} -O $db_user"
83 echo "Building database ..."
84 psql -U postgres ${db_name[$2]} < $db_backup_fold/$db_backup_name
85 if [ -e "$db_update_sql" ]; then
86 echo "Updateing database ..."
87 psql -U $db_user ${db_name[$2]} < $db_update_sql
88 fi
89
90 echo "Changing comm.properties ..."
91 sed -i 's/xxxxx/xxxxx/' ${path_tomcat[$2]}/webapps/sssss/WEB-INF/classes/comm.properties
92 echo "Restarting New tomcat ..."
93 ${path_tomcat[$2]}/bin/startup.sh
94
95 # change nginx config file
96 echo "Changing nginx config file ..."
97 sed -i 's/'${port_tomcat[$1]}'/'${port_tomcat[$2]}'/' ${nginx_conf_file1}
98 [ -e "${ngingx_conf_file2}" ] && mv ${nginx_conf_file2} ${nginx_conf_file2}_backup
99 echo "Restart nginx"
100 systemctl restart nginx
101 }
102
103 if grep ${port_tomcat[1]} $nginx_conf_file1; then
104 change_tomcat_to_tomcat 1 2
105 elif grep ${port_tomcat[2]} $nginx_conf_file1; then
106 change_tomcat_to_tomcat 2 1
107 else
108 echo "Can't find tomcat1 or tomcat2 setting in ${nginx_conf_file1}, may wrong in nginx conf file!"
109 exit 1
110 fi