Linux命令使用错误记录

65 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第16天,点击查看活动详情

问题描述

今天在使用jenkins自动部署的时候,查看日志也是打印成功的,如下图:

image.png

自以为是成功,没有看项目启动日志。当访问接口的时候,返回的还是原有数据,没有更新数据接口。

解决思路

首先,打开项目的日志查看

发现错误日志很明显,端口占用,也就是说在项目启动的时候没有将原来的进程关掉。从而发现问题应该是出在了杀进程的shell脚本上。

image.png

执行shell脚本,发现错误出在了红框这行,如下图错误提示:

image.png

很快定位到这个写的有问题,调整如下,再次运行便正常了。

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 结果如下图:

image.png

上面红框中的 awk '{print $2}'的意思是选取并输出第二列的数据。也就是我们的pid 22003.

好了今天的错误记录及我们的lsof知识就讲解到这。

欢迎大家留言交流,也欢迎大家关注我的公众号《coder练习生》