首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果远程计算机需要时间响应,如何从exec 3>/dev/tcp/${ip}退出

如果远程计算机需要时间响应,如何从exec 3>/dev/tcp/${ip}退出
EN

Stack Overflow用户
提问于 2017-11-03 18:10:40
回答 2查看 1.8K关注 0票数 1

我在一个脚本上工作,以获得应用程序的状态,如果应用程序在特定的端口上可达或不可访问。如果远程端口是活动的,并且如果远程端口不是活动的,并且需要时间来响应,则下面的代码工作正常。

代码

代码语言:javascript
运行
复制
  #!/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

以下是结果

代码语言:javascript
运行
复制
jesadmin@lava$ ./a.sh
TS lava1/22  .................................. [OK]

下面是非活动端口

代码语言:javascript
运行
复制
jesadmin@lava$ ./a.sh

TS10.203.22.16/7122  .................................. [FAIL]

如果遥控器需要时间来响应,我正在查看立即退出exec。

有没有人可以指导我如何实现这一点或任何替代方案?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2017-11-03 19:30:19

因为您已经在使用子subshell,所以最简单的方法是使用timeout (来自GNU coreutils)显式地运行该子subshell:

代码语言:javascript
运行
复制
timeout 7.5s bash -c "true <>/dev/tcp/$host/$port"

退出状态为0表示成功,1表示连接被拒绝或在时限内出现其他错误,124表示命令超时。

在您的代码中,这将类似于

代码语言:javascript
运行
复制
#!/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数组变量;希望这会有所帮助!)

票数 1
EN

Stack Overflow用户

发布于 2017-11-03 18:42:58

您可以包含命令本身的超时。尝试使用带超时或休眠$yourMinutes & kill $PID的产卵命令

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47093154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档