Bash 使用时间戳检查端口可用性的脚本
Bash Script to Check Port Availability with Timestamp
在 Mac OS X 10.10 上使用 netcat,我想每分钟测试 Facilis TerraBlock 服务器上的监听端口,以确认以太网监听器是否正常工作。
我希望脚本输出一行表示成功,一行表示失败,并在前一行记录 date/timestamp。我目前不需要将任何这些记录到文件中。
像这些原生 nectat 输出的东西是理想的:
Wed Feb 4 10:49:09 EST 2015
Connection to 10.40.255.11 port 859 [tcp/*] succeeded!
nc: connectx to 10.40.255.12 port 859 (tcp) failed: Connection refused
这是我创建的脚本:
#!/bin/bash
date
nc -z 10.40.255.11 859 || nc -vz 10.40.255.11 859
nc -z 10.40.255.12 859 || nc -vz 10.40.255.12 859
while sleep 60; do date;nc -z 10.40.255.11 859 || nc -vz 10.40.255.11 859 & nc -z 10.40.255.12 859 || nc -vz 10.40.255.12 859; done
此脚本的行为异常,我推测是 ||运营商,但我找不到另一种方法来做好这件事。具体来说,当脚本运行时,终端输出在 .11 和 .12 测试之间交替出现在时间戳之后的第一个或第二个,这让我想知道它是否只是 netcat 响应的连接超时导致回复偶尔出现订单,或者如果有更大的问题并且我的脚本返回不可靠的数据。
这是我当前输出的示例:
Fri Feb 6 10:51:33 EST 2015
Connection to 10.40.255.11 port 859 [tcp/*] succeeded!
Connection to 10.40.255.12 port 859 [tcp/*] succeeded!
Fri Feb 6 10:51:34 EST 2015
Connection to 10.40.255.12 port 859 [tcp/*] succeeded!
Connection to 10.40.255.11 port 859 [tcp/*] succeeded!
Fri Feb 6 10:51:35 EST 2015
Connection to 10.40.255.12 port 859 [tcp/*] succeeded!
Connection to 10.40.255.11 port 859 [tcp/*] succeeded!
Fri Feb 6 10:51:36 EST 2015
Connection to 10.40.255.11 port 859 [tcp/*] succeeded!
Connection to 10.40.255.12 port 859 [tcp/*] succeeded!
我添加了||和 & 运算符,以及看似冗余的代码,因为我只想在连接失败时查看 netcat 的详细输出。
您的脚本可能更可靠,如下所示:
#! /bin/bash
ips="10.40.255.11 10.40.255.11 10.40.255.12 10.40.255.12"
while true ; do
# This will make sure it will run every 60 seconds, not 60 seconds + whatever nc takes to execute
sleep 60 &
date
for ip in $ips; do
# Note that we're using -w to timeout
out=$(nc -zvw 2 $ip 859 2>&1) && echo "$out" && break
done || echo "$out"
# This waits for sleep in background
wait
done
在 Mac OS X 10.10 上使用 netcat,我想每分钟测试 Facilis TerraBlock 服务器上的监听端口,以确认以太网监听器是否正常工作。
我希望脚本输出一行表示成功,一行表示失败,并在前一行记录 date/timestamp。我目前不需要将任何这些记录到文件中。
像这些原生 nectat 输出的东西是理想的:
Wed Feb 4 10:49:09 EST 2015
Connection to 10.40.255.11 port 859 [tcp/*] succeeded!
nc: connectx to 10.40.255.12 port 859 (tcp) failed: Connection refused
这是我创建的脚本:
#!/bin/bash
date
nc -z 10.40.255.11 859 || nc -vz 10.40.255.11 859
nc -z 10.40.255.12 859 || nc -vz 10.40.255.12 859
while sleep 60; do date;nc -z 10.40.255.11 859 || nc -vz 10.40.255.11 859 & nc -z 10.40.255.12 859 || nc -vz 10.40.255.12 859; done
此脚本的行为异常,我推测是 ||运营商,但我找不到另一种方法来做好这件事。具体来说,当脚本运行时,终端输出在 .11 和 .12 测试之间交替出现在时间戳之后的第一个或第二个,这让我想知道它是否只是 netcat 响应的连接超时导致回复偶尔出现订单,或者如果有更大的问题并且我的脚本返回不可靠的数据。
这是我当前输出的示例:
Fri Feb 6 10:51:33 EST 2015
Connection to 10.40.255.11 port 859 [tcp/*] succeeded!
Connection to 10.40.255.12 port 859 [tcp/*] succeeded!
Fri Feb 6 10:51:34 EST 2015
Connection to 10.40.255.12 port 859 [tcp/*] succeeded!
Connection to 10.40.255.11 port 859 [tcp/*] succeeded!
Fri Feb 6 10:51:35 EST 2015
Connection to 10.40.255.12 port 859 [tcp/*] succeeded!
Connection to 10.40.255.11 port 859 [tcp/*] succeeded!
Fri Feb 6 10:51:36 EST 2015
Connection to 10.40.255.11 port 859 [tcp/*] succeeded!
Connection to 10.40.255.12 port 859 [tcp/*] succeeded!
我添加了||和 & 运算符,以及看似冗余的代码,因为我只想在连接失败时查看 netcat 的详细输出。
您的脚本可能更可靠,如下所示:
#! /bin/bash
ips="10.40.255.11 10.40.255.11 10.40.255.12 10.40.255.12"
while true ; do
# This will make sure it will run every 60 seconds, not 60 seconds + whatever nc takes to execute
sleep 60 &
date
for ip in $ips; do
# Note that we're using -w to timeout
out=$(nc -zvw 2 $ip 859 2>&1) && echo "$out" && break
done || echo "$out"
# This waits for sleep in background
wait
done