【发布时间】:2022-06-10 21:55:53
【问题描述】:
我正在寻找构建一个脚本,在该脚本中,我可以在 Up 或 Down 时使用 ping 命令监控 IP 文件。
我在 stackoverflow 上找到了两种出色的方法,我正在尝试将它们结合起来,但无论我做什么都行不通。我已经开始阅读 man shell,但我认为我遗漏了一些东西并且无法使其正常工作。
脚本 1:
我似乎找不到我在 stackoverflow 上找到的脚本,但在此资源下找到了相同的脚本:(Bash 和 Ping)部分,位于: https://jmanteau.fr/posts/the-facets-of-ping/#check-if-many-hosts-are-alive
这个神奇的脚本可以非常快速地并行 ping 多个主机
#!/bin/bash
argc=$#
if [ $# -lt 1 ]
then
echo "Usage: $0 <ip-list-file>"
exit 1
fi
hosts=$1
function customping
{
DATE=$(date '+%d/%m/%Y %H:%M:%S')
ping -c 1 -W 1 $1 >/dev/null 2>&1 && echo "$DATE Node $1 is UP" || echo -e "\033[1;31m $DATE Node $1 is DOWN \033[0m"
# ping -c 1 -W 1 $1 >/dev/null 2>&1 && echo "$DATE Node $1 is UP" || echo "$DATE Node $1 is DOWN"
# sleep 0.01s
}
T="$(date +%s%N)"
DEFAULT_NO_OF_PROC=8
noofproc=$DEFAULT_NO_OF_PROC
if [ -n "$2" ] #user-set no. of process instead of default
then
noofproc=$2
echo "Max processes: $noofproc"
fi
export -f customping && cat $hosts | xargs -n 1 -P $noofproc -I{} bash -c 'customping {}' \;
脚本 2:
https://stackoverflow.com/a/4708831/19313640
这个惊人的脚本循环通过 IP 并显示是向下还是向上(监控)
function check_health {
set 192.168.10.1 192.168.10.2 192.168.10.3 192.168.10.4 192.168.10.5 192.168.10.6 192.168.10.7 192.168.10.8 192.168.10.9 192.168.10.10 192.168.10.11 192.168.10.12 192.168.10.13
trap exit 2
for ipnumber in "$@"; do
DATE=$(date '+%d/%m/%Y %H:%M:%S')
ping -c 1 -t 1 $ipnumber > /dev/null
[ $? -eq 0 ] && echo -e "|\033[1;36m $DATE \033[0m" "|\033[1;32m Node |"$ipnumber "| UP \033[0m" | column -t -s "|"
done
while true; do
i=1
for ipnumber in "$@"; do
statusname=up$i
laststatus=${!statusname:-0}
ping -c 1 -t 1 $ipnumber > /dev/null
ok=$?
eval $statusname=$ok
if [ ${!statusname} -ne $laststatus ]; then
# echo $DATE Status changed for $ipnumber
DATE=$(date '+%d/%m/%Y %H:%M:%S')
if [ $ok -eq 0 ]; then
echo -e "|\033[1;36m $DATE \033[0m" "|\033[1;32m Node |"$ipnumber "| UP \033[0m" | column -t -s "|"
else
echo -e "|\033[1;36m $DATE \033[0m" "|\033[1;31m Node |"$ipnumber "| DOWN \033[0m" | column -t -s "|"
fi
fi
i=$(($i + 1))
done
# sleep 1
done
}
所以我的问题是如何将这两个脚本放在一起,并使其与第一个脚本完全并行,并通过读取文件而不是第二个脚本中的“设置”,以及第二个脚本的监控功能。
我希望我是彻底的,并就我正在尝试做的事情提供了足够的信息。
谢谢。
【问题讨论】:
-
并行处理是什么意思?您是否要创建一个客户端-服务器应用程序,其中一个进程(客户端)正在获取地址,而另一个进程(服务器)正在检查地址?
-
并行 我的意思是同时 ping 多个主机。我仍在试图弄清楚第一个脚本是如何做到这一点的,但它在 254 Ips 下运行得非常快。我还使用相关参考链接更新了线程。
标签: bash shell ip script monitor