pretecs Weblog

01.12.2004

Wenn einer eine Reise tut,

Filed under: pretecs blog — pretec @ 03:21

dann kann er programmieren….

Diese Woche bin ich auf Lehrgang im Linuxhotel Essen. Also habe ich mich am Sonntag abend gegen 17:00 Uhr in den ICE in Richtung Essen gesetzt und erstmal die Augen für etwa ein Viertelstunde zugemacht. Ich wurde von einem Typen geweckt, der sich neben mich auf den freien Sitz setzen wollte. Also hab ich ihn hinsetzen lassen und wieder die Linsen zugemacht. Allerdings konnte oder wollte ich nun nicht mehr so richtig einschlafen und hab die Linsen wieder aufgemacht. Und zu meinem Erstaunen hatte mein Sitznachbar ein 12″ Powerbook vor sich stehen :-). Als er mein Grinsen bemerkt hatte und mich fragend ansah, hab ich dann nur mein Powerbook aus dem Rucksack gezogen. Also hab ich ihn erstmal mit meinen MacOS X Fragen bombardiert, die er auch versuchte zu beantworten. Allerdings ist er ein typischer Mac-User gewesen: “Ich will nicht wissen, warum es funktioniert”, dem zufolge konnte er mir nicht so richtig weiter helfen. Aber trotzdem ein netter Plausch gewesen.

Wo ich nun mal wach war, einen Rechner zur Hand hatte und auch noch Zeit, hab ich angefangen an einem Ping-Monitor-Skript zu basteln. Das hatte ich im Büro schon mal angefangen und wollte nun weiter dran rumfrickeln.

Das Skript sieht (vereinfacht) so aus:

—-

SERVERLISTE="localhost nocheinhost"
for server in $SERVERLISTE;
do
if `ping -c1 localhost`;
then echo "OK $server" ;
else echo "MOEP $server";
fi;
done;

Beim Ausführen des Skriptes semmelte es mit folgender Fehlermeldung weg:

dests-Computer:~ dest$ ./ping_monitor.sh
usage: ping [-Rdfnqrv] [-c count] [-i wait] [-l preload]
[-p pattern] [-s packetsize] host
NICHT OK localhost
dests-Computer:~ dest$

Hmm. Was an dem Ping-Aufruf kann denn da madig sein? Nach dem ich bestimmt eine halbe Stunde gegrübelt und die wildesten Dinge probiert habe, ist mir die Lösung ein- oder besser aufgefallen :

Der Output eines normales Pings sieht so aus:
——

dests-Computer:~ dest$ ping -c1 localhost
PING localhost (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.171 ms
--- localhost ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.171/0.171/0.171 ms
dests-Computer:~ dest$

——

Der Befehl `ping -c1 localhost` wird durch seine Ausgabe auf stdout substituiert. Also durch “PING localhost (127.0.0.1): 56 data bytes” und so weiter. Auf einer Linux-Box würde sofort die folgende Fehlermeldung auftauchen:

——

admin@gate:~# if `ping -c1 localhost`; then echo "JA"; else echo "NEIN";fi;
-bash: PING: command not found
NEIN
admin@gate:~#

——

Tatsächlich hatte ich den Fehler bereits beim ersten Schreiben des Skriptes gemacht, aber
schlagartig an der Fehlermeldung erkannt, dass der Output des pings nach /dev/null gehört und ich nur den Return-Value auswerten will.

MacOS X ist aber per default _nicht_ case-sensitive, was in meinem Fall dazu führte, dass das MacOS den Befehl “PING localhost (127.0.0.1): 56 data bytes” ausführen wollte. Daher kam die Fehlermeldung mit den falschen Ping-Parametern. Tja, so kann man eine Zugreise auch rumbringen :-)

« Previous Page

Powered by WordPress