rsh Timeout in Tru64 4.0F

20/05/2008 - 07:20 von Steffen Rüter | Report spam
Hallo,

ich muß (leider) mit einem Script auf einer Unix Tru64 4.0F Maschine
mittels rsh periodisch diverse Clients abpollen und deren Prozeßstatus
überprüfen. Dafür darf ich nur Dinge benutzen, die standardmàßig bei
Tru64 4.0F mitgeliefert werden, insbesondere also kein SSH oder eine
neu kompilierte rsh-Version.
Mein Problem ist, daß ich manchmal in einen rsh-Timeout reinlaufe,
wenn ein Client zwar noch pingbar ist, aber nicht (mehr) auf rsh
sauber reagiert (z.B. wenn er gerade herunterfàhrt) - oder wenn mitten
bei der rsh-Ausführung was ganz Schlimmes auf dem Client passiert. Das
führt dazu daß mein Tool hàngt und erst gefühlte 10 Minuten spàter
weiterlàuft, wenn der entsprechende rsh-Timeout abgelaufen ist.
rsh unter Tru64 4.0F kennt leider den Parameter -t nicht, mit dem ich
diesen Timeout recht kurz setzen könnte (alles über 3 Sekunden ist eh
Fehlerfall).
Fàllt Euch spontan eine Möglichkeit ein, wie ich das elegant lösen
kann?

Momentan denke ich darüber nach, die rsh im Hintergrund zu starten,
drei Sekunden zu warten und wenn bis dahin keine Antwort gekommen ist
dann die rsh abzuschießen - aber dann warte ich auch im Erfolgsfall
die drei Sekunden, die momentane Durchlaufzeit liegt eher unter 0.2
Sekunden...

Für jeden Tipp dankbar

Steffen
 

Lesen sie die antworten

#1 Steffen Rüter
20/05/2008 - 11:06 | Warnen spam
Momentan denke ich darüber nach, die rsh im Hintergrund zu starten,
drei Sekunden zu warten und wenn bis dahin keine Antwort gekommen ist
dann die rsh abzuschießen - aber dann warte ich auch im Erfolgsfall
die drei Sekunden, die momentane Durchlaufzeit liegt eher unter 0.2
Sekunden...



Ich hab's jetzt so gelöst: Statt rsh wird im Skript die Funktion trsh
("timed rsh") aufgerufen - jegliche Ähnlichkeit zu "trash" ist
zufàllig...
trsh sieht so aus (mittels ksh):

function trsh {
rsh $* & # führt die eigentliche rsh im Hintergrund aus
sleep 1 # wartet ein Sekündchen
RUNNING=`ps -ef | grep "rsh $*" | grep -v grep | tr -s " " | cut -f
2 -d " "` #schreibt die ID des ggfs. noch laufenden Prozesses nach
RUNNING
if [ "$RUNNING" = "" ]
then
exit 0 #Ende erfolgreich wenn die rsh schon beendet war
else
kill -9 "$RUNNING" #tötet die hàngende/zu langsame rsh
exit 1 #Ende mit Fehler
fi
}

Ist nicht sonderlich elegant und ich kann sicherlich ein paar Pipes
sparen, aber es tut das was es soll - glaube ich. Habt Ihr
Verbesserungsvorschlàge?

Steffen

Ähnliche fragen