Hallo zusammen,
ich bin gerade am lernen von Shell Scripting. Für unsere Nagiosüberwachung habe ich ein Script "geschrieben" das die Alarmierungs SMS entweder über einen SMS Anbieter oder wenn dieser nicht erreichbar ist über einen angeschlossenen UMTS Stick versendet.
Der externe SMS Versender ist nur über einen Proxy in unserer internen Netzwerk erreichbar.
Wir haben an unseren Standorten jeweils einen eigenständigen Nagiosserver.
Da diese in die Jahre gekommen sind, bin ich gerade dabei die neu zu installieren und das Script zu implementieren.
Auf dem ersten Server habe ich Ubuntu 12.04 in der Server Version installiert. Dort funktioniert alles wunderbar. Er prüft ob der Anbieter bzw. Proxy erreichbar ist und wenn nicht, nimmt er den UMTS Stick.
Jetzt habe ich einen weiteren Server installiert. Auch mit Ubuntu 12.04 und da funktioniert das Script nicht.
Im Script sollte eine Umgebungsvariable mit dem entsprechenden Proxy gesetzt werden. Das macht er auf dem zweiten Server nicht.
Wenn ich testweise den Proxy manuell setzte und das Script dann ausführe bekommt das Script Probleme mit einer URL das im Script enthalten ist.
Er geht bei der URL nur bis zur Stelle wo das ? kommt.
Wo mache ich einen Fehler?
Code:
#!/bin/bash
########################
# SMS versenden von Nagios aus #
########################
#Variablen setzten
datetime="`date '+%Y%m%d%H%M%S'`"
proxyip=xxx.xxx.xxx.xxx
count=1
recipient=$6
text=$(echo "$1 on $2 is $3 Info is: $4 $5" | sed 's/'%' /'%25' /g' | sed 's/'%.' /'%25' /g')
smsid_handy="$datetime$recipient$RANDOM"
#Proxy für SMS Versand setzten
http_proxy=http://$proxyip:port
#MySQL DB Setting
db_server=localhost
db_user=user
db_password=password
#SMS Absender
sender=004917347110815
proxy_check() {
#Prüfen ob Proxy erreichbar
count=$(ping -c $count $proxyip | grep 'received' | awk -F',' '{ print $2 }' | awk '{ print $1 }')
if [ $count -eq 0 ]; then
# 100% failed
echo "Host : $proxyip is down (ping failed) at $(date). SMS wird ueber Handy versendet!"
return 1
fi
return 0
}
mysql_db(){
mysql --host=$db_server --user=$db_user --password=$db_password sms <<EOF
insert into sms_log (timestamp,sender,recipient,text,status,sms_id,error,modem) values('$datetime','$sender','$recipient','$text','$status','$smsid',"'$error'",'mindmatics');
EOF
}
sms_mindmatics() {
#SMS versenden ueber Mindmatics und Ausgabe als variable speichern
ausgabe="$(lynx --dump 'http://smsserver.mindmatics.com/messagegateway/outbound/sms/?version=3.0&cid=xxxx&password=xxxxxp&to='$recipient'&from='$sender'&targetformat=COMMON.1.1&content='"$text"'')"
if echo $ausgabe | grep "access to this resource is not allowed"
then
status=error
error="$(echo $ausgabe | cut -c1-)"
mysql_db
sms_handy
return 1
elif echo $ausgabe | grep error
then
status="$(echo $ausgabe | cut -c27-31)"
error="$(echo $ausgabe | cut -c33-)"
mysql_db
sms_handy
return 1
elif echo $ausgabe | grep success
then
status="$(echo $ausgabe | cut -c27-34)"
smsid="$(echo $ausgabe | cut -c35-68)"
mysql_db
return 0
fi
}
sms_handy() {
#SMS versenden ueber Handy und Ausgabe als variable speichern
#/usr/local/bin/sendsms $recipient "$text"
echo -e "Id:$smsid_handy\nTo:$recipient\n\n$text" > /var/spool/sms/outgoing/${datetime}_$recipient
mysql --host=$db_server --user=$db_user --password=$db_password sms <<EOF
insert into sms_log (timestamp,sender,recipient,text,sms_id,modem) values('$datetime','$sender','$recipient','$text','$smsid_handy','Handy');
EOF
return 0
}
#Hauptaufruf
proxy_check
if [ $? -ne 1 ]
then
sms_mindmatics
else sms_handy
fi
Wie gesagt, ich bin noch am lernen. Es mag sein das das Script nicht das beste ist, aber es funktioniert.
Gruß
Yoda
Lesezeichen