web-dev-qa-db-ja.com

bashを使用してmysqlから複数のIPをpingしますか?

Mysqlデータベースで見つかったIPのリストをbashからpingするにはどうすればよいですか?

これらのフィールドを含むnicsというテーブルがあります。

  • id
  • ユーザーID
  • machine_id
  • マック
  • ipv4
  • ipv6
  • dNS
  • icmp =>バイナリとして使用(0 =無効、1 =有効)。これは、ipをpingする必要があるかどうかをスクリプトに通知します
  • 作成した
  • 修正された
1
Louis Ouellet

監視アプリ(ICMPメッセージを使用して生きているホストを取得する部分)を作成した方法を次に示します。私の場合、mysqlサーバー(MariaDB)はアプリと同じマシンで実行されています。

このcronでは、2つのフィールド(ipv4とicmp)のみを使用します。 icmpフィールドは、このNICを監視するかどうかを決定するために使用されます。

スクリプトは次のとおりです。

#!/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 ips(現時点では)を監視して統計を収集できます。Debianストレッチマシンでpingの代わりにfpingを使用していることに注意してください。多くの機能があるため。

1
Louis Ouellet