我在不同的位置有5台Solaris服务器。 由于各种原因(由于网络问题或服务器本身突然停机),有时某些服务器无法从我的位置访问。
所以我想写一个Bash shell脚本来检查它们是否可以访问。我试过的是:
ssh ipaddress "uname -a"
设置密码减少身份验证。如果我没有得到任何输出,我将生成一封邮件。
答案 0 :(得分:24)
您的ssh命令将测试的次数超过服务器是否可访问 - 为了使其正常工作,ssh服务器必须正在运行,并且一切都必须正确进行身份验证。
要查看服务器是否已启动,只需简单的ping即可?
ping -c1 -W1 $ip_addr && echo 'server is up' || echo 'server is down'
答案 1 :(得分:5)
您可以使用ping手册页中的这些选项:
(可选)等待1秒钟以获得回复(" W1")
ping -c1 -W1 -q $server
Ping根据错误类型返回不同的退出代码。 所以,为了测试它是否有效,只需做一下" echo $?"获取退出代码。 像这样:
ping 256.256.256.256 ; echo $?
# 68
ping -c 1 127.0.0.1 ; echo $?
# 0
ping -c 1 192.168.1.5 ; echo $?
# 2
其中
0 means host reachable
>0 means unreachable
因此,要在bash脚本中测试它,您可以执行以下操作:
ping -c1 -W1 -q $server &>/dev/null
status=$( echo $? )
if [[ $status == 0 ]] ; then
#Connection success!
else
#Connection failure
fi
答案 2 :(得分:4)
您可以使用ping -c4 $ip_address
其中$ip_address
是远程服务器的IP并解析输出以捕获成功的数据包和/或失败的数据包,并使用mail -s
通过以下方式发送日志电子邮件。
这是让你入门的东西,你可以在它上面建立。
ping -c4 www.google.com | awk '/---/,0'
这将产生这样的输出 -
[jaypal:~/Temp] ping -c4 www.google.com | awk '/---/,0'
--- www.l.google.com ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 36.638/36.870/37.159/0.196 ms
我检查了Solaris man-page
ping
。 Solaris上的ping
输出框不同。此外,在Linux上,您可以通过声明-c
和数据包数来限制数据包。在Solaris上你必须这样做 -
ping -s www.google.com 2 4
/usr/sbin/ping -s [-l | -U] [-adlLnrRv] [-A addr_family]
[-c traffic_class] [-g gateway [ -g gateway...]] [-
F flow_label] [-I interval] [-i interface] [-P tos] [-
p port] [-t ttl] host [data_size] [npackets]
^ ^
| |
---------------------------------------
不幸的是,我没有方便的solaris盒来帮助你。
答案 3 :(得分:0)
您可以使用以下命令,
ping -c1 -W1 ip_addr || echo 'server is down'
你不能使用$ ip_addr,因为它会删除你的第一个IP号码。
答案 4 :(得分:0)
您可以将nc -z -G 2 SERVER_HOST PORT
与G
一起使用W -> G
方法,而不是在建立连接之前使用NaN
进行超时,这样它的主机将无法访问,您会更快地知道
答案 5 :(得分:0)
更多值得深思的地方:使用nmap或nc,切勿ping通。
Ping::为什么不应该使用ping? (1)最好同时检查系统和端口。 (2)由于icmp回声在许多情况下被阻止,因此ping不可靠。
Nmap:这非常快速,非常可靠,但是需要安装nmap 首选方法NMAP(原主机IP 127.0.0.1):
nmap 127.0.0.1 -PN -p ssh | grep open
Nc:通常已经安装了nc,但是在某些系统(例如Mac OS X)上,该命令挂在无法访问的系统上。 (请参阅解决方法)
nc -v -z -w 3 127.0.0.1 22 &> /dev/null && echo "Online" || echo "Offline"
Mac OSX解决方法:
bash -c '(sleep 3; kill $$) & exec nc -z 127.0.0.1 22' &> /dev/null
echo $?
0
bash -c '(sleep 3; kill $$) & exec nc -z 1.2.3.4 22' &> /dev/null
echo $?
143
(示例说明了通过好坏主机连接到端口22 ssh的示例,使用$?确定它是否以3秒的睡眠时间到达主机)
对于Mac用户(主要是Mac用户)等,您可以在脚本中使用以下命令:
# -- use NMAP, if not avail. go with nc --
if command -v nmap | grep -iq nmap ; then
nmap ${ip} -PN -p ${ssh_port} | grep -iq "open"
res=$?
elif command -v nc | grep -iq nc ; then
# -- run command if fails to complete in 3 secs assume host unreachable --
( nc -z ${ip} ${ssh_port} ) & pid=$!
( sleep 3 && kill -HUP $pid ) 2>/dev/null & watcher=$!
if wait $pid 2>/dev/null; then
pkill -HUP -P $watcher
wait $watcher
# -- command finished (we have connection) --
res=0
else
# -- command failed (no connection) --
res=1
fi
else
echo "Error: You must have NC or NMAP installed"
fi
if [[ ${res} -lt 1 ]] ;then
success=1
echo "testing => $ip SUCCESS connection over port ${ssh_port}"
break;
else
echo "testing => $ip FAILED connection over port ${ssh_port}"
fi