2016-04-08 13 views
0
#! /bin/bash 
[email protected] 
for i in $(cat ping.txt) 
do 
fping $i >/dev/null 
if [ $? -ne 0 ] 
then 
echo "$i is down"|mailx -s "connectivity test" $email 
fi 
done 

このスクリプトが正常に動作しているが、問題は、それがホストごとに個別にメールを送信され、到達不能のものと想定数のために電子メールで送信するために、複数のサーバーに対してpingを実行をテストし、レポートを送信するためにbashシェルスクリプトを書きますサーバーはより多く(3桁)です。これはベストプラクティスではないと思います。応答しないサーバ

私はダウンしたホストの一覧を1つの電子メールで見たいと思っています。シェルスクリプトで助けてください。多くのおかげで

参考: - 特にタスクのこの種のために設計されています

Testing multiple unix server Connectivity using ping command and send mail the hostname/ipaddress of the servers if any hosts are unreachable

+2

テキストを変数に保存し、最後にメールを送信しますか? –

答えて

1

監視システムは、最適なツールになります。例にはNagios、Icinga、Zabbixなどがあります。

しかし、もしあなたが本当にbashでやりたければ、ここに一つの方法があります。少なくとも1つのホストがpingに応答しない場合にのみ電子メールを送信します。

#!/bin/bash 

[email protected] 
NBR_DOWN=0 
LOGFILE=/tmp/pinglog.txt 

echo "Connectivity Test Results" > $LOGFILE 
for i in $(cat ping.txt); do 
    fping $i >/dev/null 
    if [ $? -ne 0 ]; then 
     echo "$i is down" >> $LOGFILE 
     NBR_DOWN=$((NBR_DOWN+1)) 
    fi 
done 

if [ $NBR_DOWN -gt 0 ]; then 
    mailx -s "connectivity test" $email < $LOGFILE 
fi 
+0

素晴らしい、それは働いた。応答ありがとうございました – Maverick

+0

クール。私の答えを受け入れる心?私は評判のポイントを使うことができました。 ;) –

+0

http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work –

関連する問題