我創建了一個為配置的 IP 運行 nslookup 的簡單腳本。它將運行 10 次(按要求)以驗證它是否指向活動 IP,然后如果它回傳非活動,則通過電子郵件發送警報。
腳本運行良好,但是,當它發出警報時,由于回圈,它會執行 10 倍。如果它不滿足條件,我如何只得到最后一行,以便每個 IP 只發送一封電子郵件?
下面的代碼:
CDC="456.22."
PDC="123.11"
ACTIVE_DC=$CDC
#ACTIVE_DC=$PDC
#ADD/REMOVE VIRTUAL IPs HERE
vIP="app1.app.com app2.app.com"
[email protected]
subject="[TEST - - CRITICAL WARNING] NETWORK TRAFFIC POINTING TO INACTIVE DATA CENTER"
DATE=$(date ' %Y-%m-%d %H:%M:%S')
echo ""
echo "########################################################################"
echo "#################################START##################################"
for IP in $vIP; do
echo""
app_name=$(nslookup $IP | awk 'NR==4 {print NR,$0}' | cut -c 9-50) #Prints each VIP
echo "$app_name"
for i in {1..10}; do #Runs nslookup 10x for each VIP
current=$(nslookup $IP | awk 'NR==5 {print NR,$0}' | cut -c 12-30)
current2=$(echo "$current" | cut -c 1-6)
echo "$current"
if [[ "$current2" == "$ACTIVE_DC" ]]; then
echo "Traffic is pointing to active DC"
else
echo "ERROR Traffic is pointing to INACTIVE DC"
echo "$DATE - [TEST] CRITICAL - NETWORK TRAFFIC POINTING TO INACTIVE DATA CENTER
CHECK $app_name
TRAFFIC POINTING TO $current
TRAFFIC SHOULD BE POINTING to $ACTIVE_DC ONLY!
" | mailx -s "$subject" -r $MAIL_FROM [email protected]
fi
done
done
uj5u.com熱心網友回復:
修改后的腳本:
#!/bin/bash
CDC="456.22."
PDC="123.11"
ACTIVE_DC=$CDC
#ACTIVE_DC=$PDC
#ADD/REMOVE VIRTUAL IPs HERE
vIP="app1.app.com app2.app.com"
[email protected]
subject="[TEST - - CRITICAL WARNING] NETWORK TRAFFIC POINTING TO INACTIVE DATA CENTER"
DATE=$(date ' %Y-%m-%d %H:%M:%S')
echo ""
echo "########################################################################"
echo "#################################START##################################"
for IP in $vIP; do
sendemail='false'
echo ""
app_name=$(nslookup "$IP" | awk 'NR==4 {print NR,$0}' | cut -c 9-50) #Prints each VIP
echo "$app_name"
for i in {1..10}; do #Runs nslookup 10x for each VIP
current=$(nslookup "$IP" | awk 'NR==5 {print NR,$0}' | cut -c 12-30)
current2=$(echo "$current" | cut -c 1-6)
echo "$current"
if [[ "$current2" == "$ACTIVE_DC" ]]; then
echo "Traffic is pointing to active DC"
else
sendemail='true'
echo "ERROR Traffic is pointing to INACTIVE DC"
break
fi
done
if [[ "$sendemail" == 'true' ]]
then
echo "$DATE - [TEST] CRITICAL - NETWORK TRAFFIC POINTING TO INACTIVE DATA CENTER
CHECK $app_name
TRAFFIC POINTING TO $current
TRAFFIC SHOULD BE POINTING to $ACTIVE_DC ONLY!
" | mailx -s "$subject" -r $MAIL_FROM [email protected]
fi
done
我補充的是:
- 變數在 IP 地址
sendemail的每個回圈開始時設定為 false 。for - 如果出現錯誤,則必須發送電子郵件,因此將
sendemail變數設定為 true 并break退出for i ...回圈。 - 如果
sendemail是真的,請發送電子郵件。現在每個 IP 只會發生一次,因為電子郵件發送代碼在 nslookup 10X 回圈之外。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/442659.html
標籤:Unix
