问题描述
今天在使用jenkins自动部署的时候,查看日志也是打印成功的,如下图:
自以为是成功,没有看项目启动日志。当访问接口的时候,返回的还是原有数据,没有更新数据接口。
解决思路
首先,打开项目的日志查看
发现错误日志很明显,端口占用,也就是说在项目启动的时候没有将原来的进程关掉。从而发现问题应该是出在了杀进程的shell脚本上。
执行shell脚本,发现错误出在了红框这行,如下图错误提示:
很快定位到这个写的有问题,调整如下,再次运行便正常了。
lsof -i:9011 | grep LISTEN | awk '{print $2}'
扩展知识点 lsof
lsof 全拼是list open files
列出当前系统打开文件的工具,可以查看端口的占用情况
常用参数
-p pid : 输出指定进程打开的文件;
-l : 输出中使用ID代替用户名;
-u userName : 输出指定用户打开的文件;
-c string : 输出 COMMAND 列中包含 string 的项;
-d fd : 输出包含指定描述符的项;
fileName : 输出打开文件 fileName 的所有项;
-i [46] [protocol][@hostname|hostaddr][:service|port] : 输出符合指定条件的项,其中:
46 :分别指 IPv4、IPv6;
protocol :指 TCP 或 UDP;
hostname : 网络主机名;
hostaddr : IP 地址;
service : 包含在 /etc/services 中的名称;
port : 端口号,可以是多个;
这里我们用到的参数-i:port,即:lsof -i:9011 结果如下图:
上面红框中的 awk '{print $2}'的意思是选取并输出第二列的数据。也就是我们的pid 22003.
好了今天的错误记录及我们的lsof知识就讲解到这。
欢迎大家留言交流,也欢迎大家关注我的工种昊《coder练习生》