使用 bash 从 mysql ping 多个 IP?

使用 bash 从 mysql ping 多个 IP?

如何从 bash ping mysql 数据库中找到的 IP 列表?

我有一个名为 nics 的表,其中包含以下字段:

  • ID
  • 用户身份
  • 机器编号
  • 苹果
  • IPv4
  • IPv6 协议
  • 域名系统
  • icmp => 用作二进制 (0=禁用,1=启用)。这将告诉脚本是否应该 ping ip
  • 创建
  • 修改的

答案1

以下是我构建监控应用程序的方法(使用 ICMP 消息检索活动主机的部分)。在我的例子中,mysql 服务器(MariaDB)与应用程序在同一台机器上运行。

在这个 cron 中,我只使用了 2 个字段(ipv4 和 icmp)。icmp 字段用于确定是否应监控此网卡。

脚本如下:

#!/bin/bash

#variables

SQL_U=username
SQL_P=password
SQL_D=database

mysql -u ${SQL_U} -p${SQL_P} -D ${SQL_D} -e "SELECT ipv4 FROM nics WHERE icmp=1;" | while IFS=$'\t' read ipv4; 
do 
    if [ "$ipv4" != "ipv4" ]; then
        PING_IP=$ipv4
        PING_LOSS=0
        PING_TEST=$(fping -c 1 -p 20 ${PING_IP} | awk '{ print $1 }')
        if [ "$PING_TEST" = "$PING_IP" ]; then
            PING_LOSS=1
        fi
        PING_C=$(date +"%Y-%m-%d %H:%M:%S")

        mysql -u ${SQL_U} -p${SQL_P} -D ${SQL_D} -e "INSERT INTO ping (ipv4, loss, created, modified) VALUES ('${PING_IP}', '${PING_LOSS}', '${PING_C}', '${PING_C}');"
    fi
done

所有结果都插入到名为 ping 的表中。我在其中插入 ip、二进制 ping 结果(0=丢失,1=收到)、创建和修改日期。使用此脚本,我能够每 5 分钟监控大约 100 个 ip(目前)并收集统计数据。请记住,我在 debian 拉伸机上使用 fping 而不是 ping。因为它有很多功能。

相关内容