1 启动项目遇见问题
问题:设定vue项目访问的端口号为8010,但是每次通过脚本进行更新部署时,上一个任务进程总是不会自动结束,导致每次启动后端口号变为8081、8082、8083.....
因此导致访问时无法有一个固定的端口,每次还需要手动杀死上一个任务进程,然后再次执行项目启动才会显示8010端口。
2 问题解决
由于本人是通过Jenkins下加入脚本进行触发启动,因此本方法讲解如何在脚本中找到目的端口号下正在运行程序的PID值。
(1)查询端口号下正在运行的任务有哪些
lsof -i:8010
接下来会显示如下内容
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 19729 root 19u IPv4 300702264 0t0 TCP *:8010 (LISTEN)
node 19729 root 23u IPv4 310186778 0t0 TCP localhost.localdomain:8010->192.168.3.76:51580 (ESTABLISHED)
node 19729 root 26u IPv4 303297435 0t0 TCP localhost.localdomain:8010->192.168.14.97:55974 (ESTABLISHED)
我们要执行的命令是删除PID值(位于第二列,并且每一列都是相同的),查询种种方法,没有可以直接输出PID值的方式,也没有可以杀死端口下所有进程的手段。
产生如下思路:
如果有指令可以单独输出第二、三、四列的任意一个PID值进行kill即可解决问题。
因此进行大量查阅,发现常见命令:
kill -9 PID
-9为正常杀死任务进程(还有别的参数,可以自行查阅)。
对指定行列进行打印的命令为:
awk 'NR==2{print $2}'
上述例子为指定打印第2行,第2列 (NR==代表第几行,{print $}代表第几列)
因此在脚本中我们将查询到的端口号下正在进行的任务查询:
输入:lsof -i:8010
显示:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 19729 root 19u IPv4 300702264 0t0 TCP *:8010 (LISTEN)
node 19729 root 21u IPv4 326806340 0t0 TCP localhost.localdomain:8010-
node 19729 root 23u IPv4 310186778 0t0 TCP localhost.localdomain:8010-
输入:
lsof -i:8010 | awk 'NR==2{print $2}'
显示:
19729
表明成功打印出来第二行第二列,如果想直接一句命令杀死此进程:
kill -9 `lsof -i:8010 | awk 'NR==2{print $2}'`
下面为测试行列打印操作过程截图
测试完毕,整合命令成功输出PID值