Forums Neueste Beiträge
 

print Befehl hängt gelegentlich

12/10/2007 - 14:29 von Lutz Schulze | Report spam
Hallo,

ich habe hier einen Perl Script unter Linux, der gelegentlich (das passiert
sporadisch nach Stunden oder auch mal nach 2 Tagen) ohne jedes Lebenszeichen
hàngt.

Der Script liest in einer Schleife (mit einer Pause zwischen den Abfragen)
mittels TCP über ein IO::Socket Objekt über ein Netzwerk von einem Geràt
einen kurzen String und gibt das Resultat aus.

Ich habe das Problem jetzt schon bis zu folgender Stelle eingekreist:

$messung = <$socket>;
print $messung;

Ich vermutete zuerst, dass das Problem bei der Zeile auftritt. Dem ist aber
nicht so. Wenn ich nur abfrage, aber etwas ganz anderes ausgebe làuft der
Script problemlos durch (zumindest jetzt seit 4 Tagen):

$messung = <$socket>;
print "***";

Testweise habe ich auch $messung vorher initialisiert, falls durch die
Socketabfrage kein Wert zugewiesen wird - kein Erfolg.

Wenn ich testweise die Netzwerkverbindung unterbreche, generiert der Script
eine Fehlermeldung (timeout), das kann es also nicht sein.

Ich vermute nun, dass bei der Abfrage über das Netzwerk sporadisch ein
Zeichen mit in $messung geràt, mit dem print nicht klarkommt.

Ich bin nun nicht der Perl-Experte, deshalb die Fragen: wie könnte man das
weiter eingrenzen (in Datei protokollieren?) oder solche falschen Zeichen
unterdrücken bzw. was könnte print zu derlei Reaktion veranlassen?

Für eure Tips dankt

Lutz

Mit unseren Sensoren ist der Administrator informiert, bevor es Probleme im
Serverraum gibt: preiswerte Monitoring Hard- und Software-kostenloses Plugin
auch für Nagios - Nachricht per e-mail,SMS und SNMP: http://www.messpc.de
Neu: Ethernetbox jetzt auch im 19 Zoll Gehàuse mit 12 Ports für Sensoren
 

Lesen sie die antworten

#1 Roman Racine
12/10/2007 - 14:59 | Warnen spam
Lutz Schulze wrote:

$messung = <$socket>;
print "***";



[...]


Ich bin nun nicht der Perl-Experte, deshalb die Fragen: wie könnte man das
weiter eingrenzen (in Datei protokollieren?) oder solche falschen Zeichen
unterdrücken bzw. was könnte print zu derlei Reaktion veranlassen?

Für eure Tips dankt



Das Problem scheint nicht primàr mit Perl zusammenzuhàngen, sondern mit den
Systemaufrufen, die deine Perl-Anweisungen im Hintergrund generieren.

Meine Vermutungen:

TCP-Verbindung wird so unterbrochen, dass sie in einen Timeout làuft. Wenn
das plötzlich gehàuft auftritt, kann das mit einer stàrkeren Belastung des
Servers, des Netzwerks, neuen Firewallregeln usw. zusammenhàngen.

Eine andere Vermutung ist, dass du STDOUT irgendwohin umgeleitet hast, so
dass der print-Befehl blockiert.

Ich würde an deiner Stelle mal das ganze mit strace analysieren, dann sollte
relativ schnell klar sein, wo dein Skript hàngt. Vermutlich musst du dann
so entstehende Fehler in deinem Programm irgendwie behandeln, das passiert
ja jetzt anscheinend nicht.

Gruss

Roman°
IRC-Freenode: #usenet-friends
http://www.usenet-friends.ch.vu/

Ähnliche fragen