Hallo.
Zitat von
Rogdab
Code:
CHK_SECONDS_BEHIND=`mysql -h "${SERVER_IP[server_no]}" -u monitoring --execute 'show slave status\G'|grep 'Seconds_Behind_Master:'|sed 's/ Seconds_Behind_Master: //' 2> /dev/null`
Also die Umleitung "2>/dev/null" steht an der falschen Stelle, deshalb wird die Fehlermeldung von mysql ausgegeben. Ich würde die Umleitung direkt vor die Pipe an grep setzen, also
Code:
CHK_SECONDS_BEHIND=`mysql -h "${SERVER_IP[server_no]}" -u monitoring --execute 'show slave status\G' 2>/dev/null|grep 'Seconds_Behind_Master:'|sed 's/ Seconds_Behind_Master: //'`
.
Code:
if [ $CHK_SECONDS_BEHIND = "NULL" ]
Damit willst du überprüfen, ob $CHK_SECONDS_BEHIND leer ist, oder? Das müsstest du mit dem Parameter -z machen:
Code:
if [ -z "$CHK_SECONDS_BEHIND" ]
. Du hast jetzt hier mindestens zwei Fehlerfälle zusammen: zum einen könnte der MySQL-Server nicht verfügbar sein und zum anderen könnte der MySQL-Befehl ein Empty Set zurückliefern.
Code:
then
echo -e " Slave on ${SERVER_NAME[server_no]} IP: ${SERVER_IP[server_no]}
\n It seems to be unknown how far the slave is behind!
\n Date: ${DATUM}"| mail -s "mysql replication error" $ADMIN_EMAIL
else
if [ $server_no = 5 ] || [ $server_no = 6 ] || [ $server_no = 7 ]
then
BEHIND="15000"
fi
if [ $CHK_SECONDS_BEHIND -ge $BEHIND ]
Also der Fehler von deinem Eingangsposting sollte hier jetzt nicht mehr auftreten, ich weiß jetzt nicht genau, was dein MySQL-Befehl da oben macht, aber eventuell müsstest du noch $CHK_SECONDS_BEHIND überprüfen, ob es auch wirklich eine Zahl ist, z.B. mit
Code:
if [ -z "`echo $CHK_SECONDS_BEHIND|sed s/[0-9]*//`" ]
then
if [ $CHK_SECONDS_BEHIND -ge $BEHIND ]
then
[...]
.
Gruß, Florian
Lesezeichen