0%

注册中心服务真实IP获取脚本

由于部分同事在测试环境启服务时常常不改服务名称且ip直接配置成localhost,导致很多服务调用时会连接异常,但又找不到人,为此我写了一个脚本来定位服务的真实ip。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/bin/bash
# export PATH=$PATH:/bin:/sbin:/usr/sbin

if [ ! -n "$1" -o ! -n "$2" ]; then
echo "请在脚本后输入参数:注册中心端口号 目标服务端口号"
exit 1
fi

PID=$(netstat -tunlp | grep $1 | grep java | awk '{print $7}' | awk -F '/' '{print $1}')

echo "端口$1所属进程PID为:${PID}"

ips=$(lsof -p ${PID} -nP | grep TCP | awk '{print $9}' | awk -F '->' '{print $2}' | awk -F ':' '{print $1}' | grep -v '^$' | sort | uniq)

for i in ${ips}; do
nc -z -w 2 ${i} $2 >> /dev/null 2>&1
result=$?
if [ ${result} != 0 ]; then
echo -e "${i}:$2 \t 端口关闭"
else
swagger="http://${i}:$2/swagger-ui.html"
cr=$(curl -I -m 10 -o /dev/null -s -w %{http_code} ${swagger})
if [ ${cr} != 200 ]; then
desUrl="manager - http://${i}:$2/"
else
desUrl="microservice - ${swagger}"
fi
echo -e "${i}:$2 \t 端口开放 <-- ${desUrl}"
fi
done