我在一个脚本上工作,以获得应用程序的状态,如果应用程序在特定的端口上可达或不可访问。如果远程端口是活动的,并且如果远程端口不是活动的,并且需要时间来响应,则下面的代码工作正常。
代码
#!/usr/bin/bash
TS="lava1/22"
for ip in `echo ${TS}`
do
if(exec 3<>/dev/tcp/${ip}) 2> /dev/null;
then
echo -e "TS ${ip} ..................................${GREEN[OK]${NORMAL}"
else
echo -e "TS${ip} .................................. ${RED[FAIL]${NORMAL}"
fi
done
以下是结果
jesadmin@lava$ ./a.sh
TS lava1/22 .................................. [OK]
下面是非活动端口
jesadmin@lava$ ./a.sh
TS10.203.22.16/7122 .................................. [FAIL]
如果遥控器需要时间来响应,我正在查看立即退出exec。
有没有人可以指导我如何实现这一点或任何替代方案?
谢谢
发布于 2017-11-03 19:30:19
因为您已经在使用子subshell,所以最简单的方法是使用timeout
(来自GNU coreutils)显式地运行该子subshell:
timeout 7.5s bash -c "true <>/dev/tcp/$host/$port"
退出状态为0表示成功,1表示连接被拒绝或在时限内出现其他错误,124表示命令超时。
在您的代码中,这将类似于
#!/bin/bash
TS=(lava1/22 lava2/22)
max_time=15s
for ip in "${TS[@]}"
do
if timeout $max_time bash -c "true <>/dev/tcp/$ip" 2>/dev/null
then
echo -e "TS ${ip} .................................. ${GREEN}[OK]${NORMAL}"
else
echo -e "TS ${ip} .................................. ${RED}[FAIL]${NORMAL}"
fi
done
(我还修复了几个拼写错误,并对TS
使用了Bash数组变量;希望这会有所帮助!)
发布于 2017-11-03 18:42:58
您可以包含命令本身的超时。尝试使用带超时或休眠$yourMinutes & kill $PID的产卵命令
https://stackoverflow.com/questions/47093154
复制相似问题