我有 4 台服务器,我想互相 ping 通。
预期执行ping
:
ping from 1 to 2, 3, and 4
ping from 2 to 1, 3, and 4
ping from 3 to 1, 2, and 4
ping from 4 to 1, 2, and 3
如何通过bash
脚本实现这一点?
所有 4 台服务器的用户登录均已配置为无密码。
答案1
为了监控如此少量的机器,我会使用烟平而不是用脚本重新发明轮子。
它将提供更直观的反馈、一段时间内的平均历史数据,甚至专业的外观和感觉,向他人展示另一项服务和出色的工作。人们和 PHB 喜欢通过视觉反馈来监控事物。
事实上,过去当我与互联网的卫星连接不太可靠时,我用它来监控基础设施的关键点。
配置在一个小文本文件中完成,并且很容易添加新的IP地址;它还有一个漂亮的网络界面。您只需要为其安装一个轻量级 Web 服务器即可。
您可以监控几乎所有无法通过 ICMP/ping 监控的内容;除了这4台服务器之外,您还可以监控其他关键设备。
要了解界面的工作原理,请参阅大学外部世界的冒烟界面
另请参阅示例图像:
安装完Web服务器和Smokeping后,实际的配置文件可以像这样简单:
*** Targets ***
probe = FPing
menu = Top
title = Network Latency Grapher
remark = Welcome to this SmokePing website.
+ mysite1
menu = Site 1
title = Hosts in Site 1
++ myhost1
host = myhost1.mysite1.example
++ myhost2
host = myhost2.mysite1.example
+ mysite2
menu = Site 2
title = Hosts in Site 2
++ myhost3
host = myhost3.mysite2.example
++ myhost4
host = myhost4.mysite2.example
答案2
只需将名称存储在数组中并对其进行迭代,使用ssh
连接到每个主机并 ping:
ips=("server1" "server2" "server3" "server4");
for((i=0;i<${#ips[@]};i++)); do
for((k=0;k<${#ips[@]};k++)); do
[[ $i -ne $k ]] && ssh "${ips[$i]}" ping -c1 "${ips[$k]}";
done
done
答案3
你fping
安装了吗?这可能会让这变得最简单:
$ hosts="www smtp"
$ for host in $hosts ; do
echo "$host:";
ssh iv@$host "fping $hosts";
done
www:
www is alive
smtp is alive
smtp:
www is alive
smtp is alive
(我知道,这是一个懒惰的解决方案。)
答案4
它非常适合您的要求
它将登录 server1 并仅对 server2 和 server3 执行 ping 操作,反之亦然
#!/bin/bash
while read line
do
ssh root@$line "sed "/$line/d" /root/p_final.txt |sed '/^$/d' | sed -r "s/\s+//g"|awk '{print $1}' | sed 's/^/ping -c2 /g'| sh" </dev/null
done </root/p_final.txt
其中文件 p_final.txt 包含 IP 的一一列表。如有任何疑问,请告诉我