【问题标题】:Bash Shell Script to monitor a file with IPs用于监视具有 IP 的文件的 Bash Shell 脚本
【发布时间】: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


猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-18
  • 1970-01-01
  • 1970-01-01
  • 2012-09-10
  • 1970-01-01
  • 2011-09-22
相关资源
最近更新 更多