
Ich habe einen Prozess – ein Perl-Skript – der Folgendes tut:
while true
check a POP account on a server on the lan
process any email found
write logs - messages found, actions taken, errors
sleep for 15 seconds
Es läuft auf einem Redhat 7.3-Server (ich habe ihn geerbt, ich bin mit dem Alter dieser Box nicht zufrieden). Es läuft aus /etc/inittab wie folgt:
spop:2345:respawn:/usr/local/gw/bin/popdmn
Wenn es abstürzt, wird es von init neu gestartet.
In den letzten Tagen funktioniert der Prozess nicht mehres sei dennes ist straced. Wenn es einfach läuft, meldet es sich nie beim Pop-Server an. Sobald es straced ist (über "strace -Ff -p cat /usr/local/gw/var/popdmn.pid
"), funktioniert es einwandfrei.
Als Workaround führe ich screen auf dem Server aus, während ein strace läuft. Das ist natürlich nicht gerade ideal.
Warum sollte ein Prozess das tun? Ich habe das noch nie zuvor gesehen.
Antwort1
Ich glaube, ich bin von einem alten Strace-Virus infiziert:
https://bugzilla.redhat.com/show_bug.cgi?id=64303
https://bugzilla.redhat.com/show_bug.cgi?id=75709
Auf dieser Box läuft strace-4.4-4, also ist es möglich, dass es dieser Fehler ist. Es klingt, als wäre dieser selbstverschuldet, da wir beim Debuggen strace verwendet haben – und es dadurch noch schlimmer gemacht haben.
kill -CONT
arbeitet daran, den Prozess fortzusetzen.
DefinitivZeit, diese Box zu aktualisieren.
Antwort2
Der größte Unterschied liegt meiner Meinung nach in der Geschwindigkeit und der Signalverarbeitung.
Was die Geschwindigkeit betrifft, so wird strace, wenn der Prozess mehrere Threads umfasst, das Timing ändern, was wiederum das Verhalten hinsichtlich Race Conditions usw. verändern kann.oderZeitinformationen zum Protokollverhalten.
Beispiel. Angenommen, der POP-Server wurde aktualisiert und achtet nun genauer darauf, dass ein Peer nicht mehrere POP-Befehle gleichzeitig sendet. Dies ist bei einem SMTP-Server als Mittel zur Spam-Abwehr nützlicher.
Beachtet Ihr Prozess das korrekte POP-Verhalten, indem er nach jedem einzelnen POP-Befehl auf eine Antwort vom Server wartet? Oder geht er von Erfolg aus oder wartet eine gewisse Zeit zwischen den Befehlen.
Wenn Sie den tatsächlichen Protokollverkehr in einem erfolgreichen und einem fehlgeschlagenen Fall erfassen, gibt es irgendwelche Anzeichen für eine Protokollverletzung?