目的:更新war包以更新项目,并重启TOMCAT
1.接收新war包
略过,普通的上传文件,复制到tomcat/webapps 下
需要注意的是:不要立即修改老的war包,否则会导致项目文件被TOMCAT立即修改
先把新的war包 改个名字 如 myAPP.war 改为 myApp.new 再复制到/webapps 下
2.更新准备
2.1 编写更新脚本
脚本主要操作:
1.先进入webapps目录
2.检查老war包是否存在,检查新war包是否存在(改为了XX.new)
3.如果上面2个都存在,则执行backup操作: 把老war包(XX.war)改为(XX.bak),再将新war包(XX.new)改为项目名(XX.war)
4.执行重启TOMCAT操作,图中红框是因为把TOMCAT作为service启动的特殊重启方法.(个人可以:先调用tomcat目录下/bin/shutdow.sh 再sleep 3S 再调用/bin/startup.sh )
将该脚本放到资源目录下
2.2将更新需要的文件复制到任意位置(这里全部放到webapps下)
包括:1:更新脚本
2.接收输出的文件upgrade.out文件
图中2个框是检查老的脚本和升级日志是否存在,如果存在就删除,再将新的复制到指定位置
执行这个操作使用的是 Runtime.getRuntime();
注意这个runtime 有2个输出流需要接收,自行百度,由于这个runtime在这里用完服务器就重启,所以不存在buffer溢出的问题,所以没有对输出流进行接收.
执行完睡一定时间留着备用(或者执行其他结束准备操作)
2.3 运行更新脚本
这里使用的SSH进行的操作,runtime执行使用始终有问题所以没用
其中nohup 和结尾的 & 用来忽略SSH终端退出导致的终止信号
“>>” 用来将日志输出到upgradeLog.out文件中
附:基于 ethz.ssh2 写的SSHAgent
注意: 一个SSH connection推荐维护10个Session 多线程需要注意(一般用不到) 这里只有一个connection
特别注意:Linux服务器会有2个输出流:标准输出,和错误输出流. (相对java程序是输入流)如果有持续的输出会导致阻塞
建议用2个线程分别接收这个2个输出流,防止阻塞,