背景介绍:
在服务器部署jar包,以前都是在Windows打包然后上传到服务器,再通过命令 java -jar xxx.jar 部署,感觉很繁琐,所以就写了个脚本,自动 pull 远程仓库代码,然后打包,部署。
出现问题:
先写了一步获取 jar 包进程的 pid命令
#!/bin/sh
pid=$(ps -ef|grep bigbang.jar | grep -v grep | awk '{print $2}')
echo $pid
当执行这个脚本时,报错如下:
分析原因:
因为这个脚本最开始是windows下写好,上传到服务器上的,windows 下回车符和linux下回车符解析是不一样的,所以才会出现上述问题。
解决方法:
在脚本中使用 set ff=unix ,告诉 vi 编辑器,使用unix换行符
这样再次执行这个脚本时,就能成功获取线程pid了
贴一个从远程仓库拉去最新代码、打包、部署的脚本:
#! /bin/sh
#要部署jar的名字
jarName=bigbang.jar
#项目的根目录
cd /usr/local/bigbang/bigbang-git/bigbangspring
#拉去仓库最新代码
git pull
#开始使用maven打包
mvn clean package -DskipTests
#打包结束,cd 到项目target目录,打好jar就在该目录下面
cd /usr/local/bigbang/bigbang-git/bigbangspring/target
#杀死当前已部署的jar包进程
pid=$(ps -ef|grep $jarName | grep -v grep | awk '{print $2}')
kill -9 ${pid}
#开始部署jar包
nohup java -jar -Dfile.encoding=UTF-8 $jarName >/dev/null 2>&1 &
为了更好地看到脚本执行流程,可以在每一步输出相应的提示语句,这样整个流程就比较清楚,脚本执行到哪一步报错,都能一清二楚,快速定位错误位置。