在上线程序时上一个版本如何备份呢?一直是一个头疼的问题,目前是按照年月日文件夹写入历史版本的程序包。
脚本如下:
#!/bin/bash # 部署file-loader.war # 1. kill当前运行的file-loader进程 # 2. 备份当前war到backup # 3. 从deploy目录获取新war包 # 4. 启动file-loader #2020年3月9日10:14:29 update # 1、 多版本backup,by 年月日naming # 2、新版war包请放入depoly目录。 # 启动方式 ./deploy-file-loader.sh TIME=$(date '+%Y%m%d%H%M%S') DATE=$(date +%Y%m%d%H) dirname='/opt/servers/file-loader/backup' PID_CNT=$(ps -ef|grep file-loader|grep java |grep -v grep | awk '{print $2}'|wc -l) PID=$(ps -ef|grep file-loader|grep java |grep -v grep | awk '{print $2}') if [ $PID_CNT -gt 0 ];then echo "$PID is running" ps -ef|grep file-loader|grep java|grep -v grep | awk '{print $2}'|xargs kill -9 sleep 5s echo "kill finish." else echo "loder is not running,begin start fileloader." fi if [ -d $dirname/$DATE ];then echo "$dirname/$DATE is exist" else mkdir -p $dirname/$DATE echo "$dirname/$DATE create susscessful" fi echo "begin backup, the dir si $dirname " cp /opt/servers/file-loader/file-loader.war $dirname/$DATE echo "copy war to $dirname/$DATE successful" mv deploy/file-loader.war . echo "Get new war from deploy dir to current path" setsid java -jar -Dspring.profiles.active=test /opt/servers/file-loader/file-loader.war --server.port=8033 --rtmMqSwitch=N --hmsMqSwitch=Y --logHome=current > /dev/null & sleep 5s PID1_CNT=$(ps -ef|grep file-loader|grep java|grep 8033 |grep -v grep | awk '{print $2}'|wc -l) PID1=$(ps -ef|grep file-loader|grep java|grep 8033 |grep -v grep | awk '{print $2}') echo "$TIME--Run file-loader, PID: $PID1" if [ $PID1_CNT = 0 ];then echo "current start failed,please doube check the ersult" else echo "$TIME--Run file-loader, PID: $PID1" -> deply.log fi setsid java -jar -Dspring.profiles.active=test /opt/servers/file-loader/file-loader.war --server.port=8032 --rtmMqSwitch=N --hmsMqSwitch=Y --loadHisFileFlg=Y --logHome=loadHis > /dev/nulil & sleep 5s PID2_CNT=$(ps -ef|grep file-loader|grep java|grep 8032 |grep -v grep | awk '{print $2}'|wc -l) PID2=$(ps -ef|grep file-loader|grep java|grep 8032 |grep -v grep | awk '{print $2}') echo "$TIME--Run file-loader-loadHis, PID: $PID2" if [ $PID2_CNT -eq 0 ];then echo "his fileloader start failed,please doube check the result" else echo "$TIME--Run file-loader-loadHis, PID: $PID2" -> deply.log fi
这样做有一个最大的问题就是每个历史版本的jar包名字都一样,版本管理如何做呢?如果每次打包上线带上版本名的话,岂不是每次都要改脚本,显然是有问题的。如何解决这个问题呢?
前两天刚学过Linux 软连接和硬链接 。有一些启发。
软连接就是也给很好的选择呀! 指向一个镜像。又不占空间,最关键的是我可以让源文件名固定下来写在脚本中,目标文件就可以每次换不同的版本别的jar包了。
ln –s 源文件 目标文件
注意最好用绝对路径来避免软连接被移动后产生死链。