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