Ausgangspuffer von Windows-Server mit Perl löschen
Thomas Mirke
- webserver
0 Cruz
Hallo!
Ich habe ein Newsletter-Perlscript erstellt, das eine HTML-Mail mit mime::lite an ca. 2600 Adressen senden soll. Leider kommt es nach ca. 20 Sekunden zum Abbruch des Scripts, was auf einen Browser-Timeout zurückzuführen ist. Da wir über einen eigenen Windows-Server verfügen, wurde dort eine Laufzeit von 30 Min. eingestellt.
Durch Recherchen hier im Forum und andernorts habe ich herausgefunden, dass sich der Ausgangspuffer eines Linuxservers durch die Zeile
$|=1;
löschen lässt (Kein Buffering bei Dateioperationen), was dazu führt, dass der Browser laufend "Futter" erhält und ein Browser-Timeout vermieden wird.
Zugleich habe ich gelesen, dass diese Zeile bei ActivePerl unter Windows keine Wirkung auf Server hat, was ich in meinem Fall leider bestätigen kann.
Meine Frage ist, wie evtl. doch der Ausgangspuffer eines Windows-Webservers gelöscht - oder noch besser durch das Perlscript beeinflusst / gesteuert werden kann. Kann dazu jemand von Euch einen Hinweis geben?
Abschließend noch der Hinweis, dass ich möglichst keinen Workaround durch
o.ä suche. Diese Wege bin ich schon gegangen und möchte am liebsten, dass das Script einfach ohne Abbruch durchläuft ...
Für Hinweise im Voraus schon mal Danke!
TM
Hallo,
fork ein Kindprozess ab, starte darin das Mailingskript mit exec(). Im Hauptprozess gibst du ein "fertig" im Browser aus und die Sache ist erledigt. Dein Mailingskript läuft dann in Ruhe im Hintergrund und kann durch den Browser nicht mehr gestoppt zu werden. Für diese Technik musst du dein Skript gar nicht erst anfassen, es sei denn sein Verhalten ist abhänging von irgendwelchen ENV Variablen, die dann natürlich nicht mehr zur Verfügung stehen.
Wenn der Prozess beim Brechen und Biegen mit einem offenen Browser begleitet werden soll, dann kann ich dir auch nicht helfen. Dafür sind Webanwendungen nicht gedacht.
Gruß,
Cruz