---
order: 2
---
# 升级WAR包

本文主要介绍如何升级项目中的war包，分为Linux系统升级war包和windows系统升级war包。

升级war包的主要步骤为：

\[\[toc]]

:::warning 升级前必读
由于升级过程中系统可能会对表结构或数据进行升级，为了升级过程更稳定，建议先在测试环境进行升级测试，并对生产环境系统以及数据库的默认数据源进行[完整备份](../../sys-settings/project/README.md#backup)。

替换WAR包并[重启tomcat](#linux-start-tomcat)后，系统会先显示升级确认页面（当新的WAR包版本号的前2位与老版本有变化时才会提示确认页面，第三个版本号变化属于BUG修复并不会提示确认），用户需确认升级版本号是否正确，并输入管理员账号密码后才能开始升级。
:::
![升级确认](./images/2021-11-22.png)

## Linux系统升级war包{#linux-war}

正常升级war包的时候，应该使用tomcat启动的Linux用户登录，比如succez用户，一般不使用root登录，但是在实际的工作中，使用root用户的情况比较多，所以本文的Linux系统升级war包部分，以root用户为例子升级war包。

### 停止tomcat{#linux-stop-tomcat}

1. 查看tomcat进程

   ::: tip
   一台Linux服务器可能会存在多个tomcat进程，需要在查询后记录以下两个内容：

   1. tomcat进程路径
   2. tomcat进程PID

   通过进程路径确认对应的产品目录，确认是否操作此目录的产品项目，通过PID验证、结束进程。
   ::::
   具体查看进程的步骤如下：

   - 执行命令查看tomcat进程  `ps -ef | grep tomcat` ，
     控制台会输出tomcat进程信息
   - 根据此进程提供的信息可知，系统中运行了一个tomcat进程，tomcat的启动用户为`succez`用户，进程PID为`1674`
   - 根据 `-Dcatalina.base=/succezsoft/tomcat` 可知此进程的tomcat路径为 `/succezsoft/tomcat`

   ```sh
   [root@oracle19c ~]# ps -ef | grep tomcat
   succez     1674      1 45 14:00 pts/0    00:00:46 /succezsoft/jdk/bin/java -Djava.util.logging.config.file=/succezsoft/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.awt.headless=true -Dsucc.workdir=/succezsoft/workdir -Djava.net.preferIPv4Stack=true -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8 -DLANG=zh_CN.UTF-8 -server -Xmx1g -Xms1g -XX:+UseG1GC -XX:+AlwaysPreTouch -XX:+ScavengeBeforeFullGC -XX:+DisableExplicitGC -Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true -Dorg.apache.catalina.connector.CoyoteAdapter.ALLOW_BACKSLASH=true -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /succezsoft/tomcat/bin/bootstrap.jar:/succezsoft/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/succezsoft/tomcat -Dcatalina.home=/succezsoft/tomcat -Djava.io.tmpdir=/succezsoft/tomcat/temp org.apache.catalina.startup.Bootstrap start
   root       1822   1613  0 14:02 pts/0    00:00:00 grep --color=auto tomcat
   ```

2. 进入tomcat安装目录的bin目录，执行停止程序

   ```sh
   cd /succezsoft/tomcat/bin
   ./shutdown.sh
   ```

   等待停止程序执行结束后，再次查看tomcat进程  `ps -ef | grep tomcat`，如果相同PID的进程依旧存在，可以使用kill命令结束进程 `kill -9 进程PID`。
   ::: warning 安全告知
   不要一开始就直接使用kill命令，一定先尝试./shutdown.sh之后，无法结束进程，再使用kill命令。

   直接kill进程可能导致数据丢失。
   :::

3. 清理work目录

   进入work目录，删除其中的文件

   ```sh
   cd /succezsoft/tomcat/work
   ls
   rm -rf Catalina
   ```

   ::: warning 安全告知
   删除之前一定要确认被删除文件的路径是否有错，如果删除了其他文件可能会导致系统运行错误。

   此步骤删除的文件是`tomcat/work`目录下的`Catalina`文件夹及其中的文件。
   :::

### 替换war包{#linux-update-war}

1. 备份旧war包，删除旧war包已解压的的目录

   ```sh
   mkdir /succezsoft/tomcat/warbak
   cd /succezsoft/tomcat/webapps
   mv ROOT.war /succezsoft/tomcat/warbak
   rm -rf ROOT
   ```

   - 第一行命令是创建备份文件夹
   - 第二行命令是进入webapps目录
   - 第三行命令是将旧war包移动到备份文件夹内
   - 第四行命令是删除旧war包的解压文件

   具体的旧war包名需要去webapps目录查看，上面的步骤仅作为参考，有时候可能会有两个war包或者包名非ROOT.war，需要根据项目情况进行操作。
2. 上传新的升级war包，并移动到webapps目录

   根据项目情况选择上传方式，可以使用XFTP等工具上传，假设上传的目录为`/root`，升级war包名为`ROOT.war`，将升级war包移动到`/succezsoft/tomcat/webapps`目录。

   ```sh
   mv /root/ROOT.war /succezsoft/tomcat/webapps
   ```

   如果升级war包名与旧war包名不一致，要将升级war包名修改成旧war包名，例如旧包名为`succezbi.war`的时候要先进行如下操作。

   ```sh
   mv /succezsoft/tomcat/webapps/ROOT.war /succezsoft/tomcat/webapps/succezbi.war
   ```

   更换了新war包之后，要将新war包的权限用户修改成tomcat启动用户。

   ```sh
   chown succez:succez /succezsoft/tomcat/webapps/ROOT.war
   ```

### 启动tomcat{#linux-start-tomcat}

1. 执行启动程序启动tomcat

   先执行命令 `su succez` 切换到上文说到的tomcat启动用户，再执行下面的命令启动tomcat。

   ```sh
   cd /succezsoft/tomcat/bin
   ./startup.sh
   ```

2. 再次查看tomcat进程，主要看进程是否正常存活 `ps -ef | grep tomcat`。

3. 如果没有看到新的tomcat进程，就进入logs目录，查看日志信息

   ```sh
   cd /succezsoft/tomcat/logs
   tail -100f catalina.out
   ```

   上面的命令是跟踪文件中最后100行的信息，100也可以替换成更大的数字来查看更多的日志行数，看日志中的报错信息，判断无法启动的原因，排查错误之后再次重复上面的步骤启动tomcat。

   如果要退出日志查看可以按住键盘上的 `Ctrl + C`。

## Windows系统升级war包{#windows-war}

本文的Windows系统升级war包指的是在DEMO体验版中升级，如果是自己手动部署的环境要升级war包，步骤也是一样的，只是需要根据自己部署的目录做出调整。

本文演示的步骤中：

- DEMO体验版目录：`D:\SuccBI-standalone-4.1.0`
- DEMO体验版tomcat目录：`D:\SuccBI-standalone-4.1.0\server\tomcat`

### 停止tomcat{#windows-stop-tomcat}

进入DEMO体验版目录中，双击`shutdown.bat`执行关闭程序，看到`Tomcat shutdown complete`和`Press any key to continue . . .` 说明tomcat程序已经安全关闭。

![DEMO体验版关闭tomcat程序](./images/2021-07-10-20-57-37.png)

这个时候就可以关闭弹出的tomcat和shutdown进程窗口了。

### 替换war包{#windows-update-war}

1. 进入DEMO体验版tomcat目录，创建bak文件夹
2. 进入tomcat目录下的webapps文件夹，删除旧war包解压后的文件夹，并将旧war包移动到bak文件夹内（右键`剪切`移动）

   ![DEMO体验版备份-删除解压文件](./images/green-bak-del.gif)
3. 将升级war包复制到tomcat目录下的webapps文件夹内
4. 进入tomcat目录下的work文件夹内，删除`Catalina`文件夹

   ![DEMO体验版清理work目录](./images/green-del-work.gif)

### 启动tomcat{#windows-start-tomcat}

进入DEMO体验版目录中，双击 `startup.bat`，会弹出tomcat的程序运行窗口，等待一段时间，看到 `Server startup in XXXX ms`，说明tomcat启动成功。

![DEMO体验版启动tomcat](./images/green-start-tomcat.gif)

如果程序框闪退或者报错无法继续执行，可以去DEMO体验版tomcat目录下的logs文件夹内，查看 `catalina.out`文件，分析日志中显示的问题，探查启动失败的原因，排查错误后再次启动。

## 验证{#check-web}

完成了如上升级war包的操作后（Linux/Windows），还需要对web进行一些简单测试。

1. 查看版本号，确认已升级。查看系统版本号详见[查看系统信息](../../sys-settings/basic/sysinfo.md)。
2. 简单功能测试。对平时常用的部分测试使用，如果功能完好，没有弹出报错窗口，那就代表本次的升级war包操作成功。
3. 包版本回退。如果升级了war包之后出现问题，项目无法使用，可以选择将war包回退到之前的版本。把之前备份的war包重新换回去，步骤与上述升级war包一致，在紧急情况下重新投入使用，等待新war包中出现的问题给出解决方案再升级。
