一键启动spring boot项目的shell脚本

      因为平时做的项目是前后端分离的,要单独给前端开一个端口让前端开发人员去调用接口调试,但是问题是每次代码改动都要为提供给前端的进程重新部署一次,且每次部暑要经过以下4个步骤

    1,监听提供给前端开发人员调用的端口的进程pid

    2,先杀掉进程,

    3,然后再将项目打成war包

    4,最后执行

且每一个步骤都要等待前一个步骤执行完毕才方便输入命令执行,所以重新操作麻烦且耗费时间。最后就写成了如下shell脚本bootDongjianMsApplication,

只需要sh bootDongjianMsApplication 手动执行一次,然后上面四个步骤则会依次被自动执行。

# 终止监听8089端口的程序
lsof -i:8089 |awk '{print $2}' | sed -n '2p' | xargs kill -9

# 启动程序
cd ../
cd git/dongjian-ms-internal/
mvn clean install -D maven.test.skip=true
cd target
java -jar dongjian-ms-internal-0.0.1-exec.war --server.port=8089

解释:

1, lsof -i:8089 为找到监听8089的程序及对应程序的pid

2,awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息。 awk处理过程: 依次对每一行进行处理,然后输出,命令形式:
awk [-F|-f|-v] ‘BEGIN{} //{command1; command2} END{}’ file
 [-F|-f|-v]   大参数,-F指定分隔符,-f调用脚本,-v定义变量 var=value
'  '          引用代码块
{ }           命令代码块,包含一条或多条命令
print 是awk打印指定内容的主要命令
$0           表示整个当前行
$1           每行第一个字段
awk  -F: '{print $1,$3,$6}' OFS="\t" /etc/passwd        //输出第1、3、6列字段,以制表符作为分隔符
执行效果下: 
~$ lsof -i:8089
COMMAND   PID    USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
java    22394 netease   22u  IPv6 0x6ae3bdab18452089      0t0  TCP *:8089 (LISTEN)
~$ lsof -i:8089 |awk '{print $2, $4, $1}'
PID FD COMMAND
22394 22u java

3,sed -n 是指定第几行

sed -n '2p' 表示获取结果的第2行

4,“xargs kill -9” 中的xargs命令是用来把前面命令的输出结果(这里是PID)作为“kill -9”命令的参数,并执行该命令。

猜你喜欢

转载自blog.csdn.net/qq_2300688967/article/details/80612319