![使用 bash 从 mysql ping 多个 IP?](https://linux22.com/image/1009269/%E4%BD%BF%E7%94%A8%20bash%20%E4%BB%8E%20mysql%20ping%20%E5%A4%9A%E4%B8%AA%20IP%EF%BC%9F.png)
如何从 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。因为它有很多功能。