Neue Wrapper-Version (was: Re: avwrap.pl)
Martin Butkus
m.butkus at tu-bs.de
Mo Aug 4 10:57:39 CEST 2003
Hallo Frau Koczian,
In message <5A1D97077DB at buch.biblio.etc.tu-bs.de> you write:
> - banal: es waere schoen, wenn die Logging-Ausgabe am Ende eines Jobs einen
> Zeilenumbruch haette. Jetzt wird die Ausgabe fuer den naechsten Job direkt
> drangeklatscht.
Schon, aber das Skript kann ja auch mehrere TCP/IP-Connections
gleichzeitig bedienen. Dann würden Zeilenbrüche mitten in der
Logausgabe von anderen Jobs auftauchen. Ich weiß nicht, ob das
so wünschenswert wäre.
> - auch nicht wesentlich (vermute ich), aber komisch: wegen fehlender
> Zugriffsrechte auf das im Skript eingesetzte Temp-Verzeichnis wurden meine
> avwrapxxx.in-Dateien nicht geloescht und ich konnte sehen, was man
Mich wundert etwas, daß das Skript dann überhaupt Dateien anlegen
konnte. Vielleicht sind die avwrap*.in-Dateien ja auch Überbleibsel
von abgebrochenen avwrap-Prozessen?
> normalerweise wohl nicht sehen kann: in einem Teil dieser Dateien erschien
> die erste Zeile ("& <parameterverzeichnis>") mehrfach, einmal mehr als
> zwanzigmal.
Merkwürdig. Wie sieht es denn aus, wenn man stattdessen den Avanti-W
laufen läßt, und dort das Job-Logging einschaltet?
Denn zunächst würde ich das Problem ja bei dem Prozeß vermuten, der
den Avanti aufruft. In der ".in"-Datei sollte jedenfalls nur das
erscheinen, was der avanti-cl über den Socket hineinbekommt.
So ist es zumindest gedacht. Einen Programmierfehler kann
ich natürlich nicht ausschließen.
Vielleicht gibt sich das Problem ja auch in der neuen Version (s.u.).
> - aergerlich: wenn avwrap.pl 64 Jobs ausgefuehrt hat, dann geht nichts
> mehr. Logging-Ausgabe des Servers: "cannot fork: Resource temporarily
Ja, das Skript (in seiner alten Version) hat für jede neue
TCP/IP-Verbindung per fork() einen Sub-Prozess angestartet, der
sich dann um "seinen" Client kümmern sollte.
Anscheinend haben sich diese Sub-Prozesse nicht ordentlich wieder
beendet (was ich aber in der Prozessliste von Windows nicht bemerkt habe).
An die magische Grenze von 64 Subprozessen bin ich beim Testen offenbar
niemals gestoßen, sonst wär's mir auch aufgefallen.
Die neue Version des Skripts kommt ohne fork() aus, und bedient
alle seine offenen Verbindungen selbst. Damit dürften die von Ihnen
beschriebenen Probleme nicht mehr auftreten. Ich hab's selber mal
mit 70 Connections hintereinander weg ausprobiert, und keine Probleme
feststellen können.
Zur neuen Version: Sie steht inzwischen zum Download bereit (wieder an
derselben Stelle wie die alte). Getestet unter Win 98/NT/XP mit
Perl Version 5.8.0.
Wesentliche Unterschiede:
- Das Skript läßt sich nun auch als NT-Dienst installieren
(getestet unter WinNT und XP):
avwrap.pl -install # Installation
avwrap.pl -remove # De-Installation
Wird es dagegen ohne Argumente aufgerufen, funktioniert es wie
gehabt "ganz normal" als Konsolenapplikation.
- Wegen der Service-Funktionalität wird nun zusätzlich das
Perl-Paket "Win32::Daemon" benötigt. Dieses Paket gibt es als
Open-Source-Software zum freien Download unter
http://www.roth.net/perl/Daemon/.
Hat man die "ActivePerl"-Version von ActiveState installiert,
so kann man die Installation des Paketes auch automatisiert
mit Hilfe des "Perl Package Manager" durchführen. Aufruf wie folgt:
c:\perl\bin\ppm.bat install http://www.roth.net/perl/packages/win32-daemon.ppd
Freundliche Grüße,
Martin Butkus
Mehr Informationen über die Mailingliste Allegro