PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Script funktioniert auf anderem Server nicht



yoda
28-06-2012, 14:14
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?



#!/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,err or,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

zst
29-06-2012, 13:55
Wenn dein Script auf dem einen Server funktioniert, dann musst du wohl eher die Unterschiede der beiden Server ermitteln ... Proxy-Einstellungen ... auch locale würde ich prüfen.
Die Fehlermeldung verrät wohl keine weiteren Details?
Viel Erfolg!
Gruß zst

yoda
02-07-2012, 08:37
Guten Morgen,

das Proxyproblem konnte ich lösen.
Das Problem, dass mir der Link nach dem ? nicht weiter ausgeführt wird besteht weiterhin.
Hab es auch mal mit curl probiert und den Link direkt auf der Shell eingegeben. Dort passiert das gleich. Auf dem einen Server gehts auf dem anderen nicht.
Werde heute noch mal nach Unterschiede für die beiden Systemen suchen.
Die installierten Pakete habe ich schon gleichgezogen.

Gruß
Yoda