【发布时间】:2019-10-14 02:52:27
【问题描述】:
我正在创建一个 bash 脚本,它可以自动检查两个 unix 主机之间的连接性。需要检查特定端口是否从一台主机打开到另一台主机。主机没有 NCAT(由于某些限制),所以只能使用 Telnet。
如果 telnet 连接成功,代码可以正常工作,但如果 telnet 失败,则需要 2 分钟以上。如果没有连接,我需要 telnet 在 2 秒内退出。试图找到一种方法来强制 telnet 命令退出,即使它失败。
我创建了几个脚本,它们可以读取源文件并从那里运行以下命令以远程登录目标服务器。
以下代码将在需要测试 telnet 连接的服务器上执行。
#!/usr/bin/bash
>/wastmp/$1.txt
echo "********************************************************************" >>/wastmp/$1.txt
echo "Checking Telnet connection from "$1 >>/wastmp/$1.txt
echo "********************************************************************" >>/wastmp/$1.txt
while read target;
do
x=$(sleep 3 | telnet `echo $target | awk 'BEGIN { FS=":" } { print $1 }'` ` echo $target | awk 'BEGIN { FS=":" } { print $2 }
'` | grep -i connected | awk {'print $1'})
if [[ "$x" == "Connected" ]];
then
echo $target"=Success" >>/wastmp/$1.txt
else
echo $target"=Fail, please check server & port">>/wastmp/$1.txt
fi
done </wastmp/target_server
预期结果: host1:port=失败,请检查服务器和端口 host2:port=失败,请检查服务器和端口 . . .
hostn:port=成功
【问题讨论】:
-
您可以尝试使用一个实用程序,例如在这里找到的那个,elifulkerson.com/projects/tcping.php,因为它是一个可以使用端口号的 ping。
-
一般答案,要强制使任何 shell 命令超时,您可以在其前面加上
timeout以在提供的时间内使该命令超时。例如timeout 5 telnet 1.3.4.5将在 5 秒内自动超时,除非 telnet 在 5 秒前返回。请注意,当timeout命令退出命令时,rc将非零。 -
在命令对我有用之前添加超时。谢谢