Perl Skript als W32 Service?

Perl Skript als W32 Service?

am 13.09.2007 09:27:37 von Ferry Bolhar

Hallo,

ist es möglich, ein Perl-Skript (das im Prinzip eine Endlosschleife
ausführt),
als Windows Service, das auch mit den Befehlen "net start", "net stop",
"net pause" u.a. kontrolliert werden kann, einzurichten?

Besteht auch die Möglichkeit, eine "Rundown-Handler" einzurichten, der
abläuft, wenn das Service niedergefahren (gestoppt) wird - händisch, aber
z.B. auch bei einem System Shutdown?

Ich habe es schon mit Win32::Service probiert, aber da scheint nichts
Passendes dabei zu sein.

Danke & LG,

Ferry

--
Ing Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail: bol@adv.magwien.gv.at

Re: Perl Skript als W32 Service?

am 13.09.2007 10:08:27 von Peter Arnhold

Hallo Ferry,

Ferry Bolhar schrieb:
> Hallo,
>
> ist es möglich, ein Perl-Skript (das im Prinzip eine Endlosschleife
> ausführt),
> als Windows Service, das auch mit den Befehlen "net start", "net stop",
> "net pause" u.a. kontrolliert werden kann, einzurichten?
>
> Besteht auch die Möglichkeit, eine "Rundown-Handler" einzurichten, der
> abläuft, wenn das Service niedergefahren (gestoppt) wird - händisch, aber
> z.B. auch bei einem System Shutdown?
>
> Ich habe es schon mit Win32::Service probiert, aber da scheint nichts
> Passendes dabei zu sein.

schau mal hier:
http://www.roth.net/perl/Daemon/

Gruß,
Peter

Re: Perl Skript als W32 Service?

am 13.09.2007 12:07:18 von Robert Berghaus

Ferry Bolhar schrieb:
> Hallo,
>=20
> ist es möglich, ein Perl-Skript (das im Prinzip eine Endlosschleif=
e
> ausführt),
> als Windows Service, das auch mit den Befehlen "net start", "net stop",=

> "net pause" u.a. kontrolliert werden kann, einzurichten?
>=20
> Besteht auch die Möglichkeit, eine "Rundown-Handler" einzurichten,=
der
> abläuft, wenn das Service niedergefahren (gestoppt) wird - hä=
ndisch, aber
> z.B. auch bei einem System Shutdown?
>=20
> Ich habe es schon mit Win32::Service probiert, aber da scheint nichts
> Passendes dabei zu sein.
>=20

Von Microsoft gibt es die Programme Instsrv.exe und srvany.exe.
Ein Installationsbatch von mir sieht so aus:

Instsrv MesswertErfassung d:\Tools\srvany.exe
regedit /s MesswertErfassung.reg

Der Inhalt der Reg-Datei so:
REGEDIT4

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Messwe rtErfassung]
"Type"=3Ddword:00000110
"Start"=3Ddword:00000002
"ErrorControl"=3Ddword:00000001
"DisplayName"=3D"MesswertErfassung"
"ObjectName"=3D"LocalSystem"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Messwe rtErfassung\P=
arameters]
"Application"=3D"D:\\Programme\\Perl\\bin\\perl.exe"
"AppDirectory"=3D"E:\\Messdaten"
"AppParameters"=3D"E:\\Messdaten\\MesswertErfassung.pl"

Das habe ich vor Jahren erstmalig auf einem Win2000 System=20
ausprobiert und installiert und vor ca. einem Jahr auf einem=20
System mit Win-XP Home (welches ich mit den Tips aus der c't zu=20
Pro gemacht habe!).

--=20
Schönen Gruß aus dem Bergischen Land
Robert

Re: Perl Skript als W32 Service?

am 13.09.2007 15:21:40 von Peter Arnhold

Robert Berghaus schrieb:
> Ferry Bolhar schrieb:
>> Hallo,
>>
>> ist es möglich, ein Perl-Skript (das im Prinzip eine Endlosschleife
>> ausführt),
>> als Windows Service, das auch mit den Befehlen "net start", "net stop",
>> "net pause" u.a. kontrolliert werden kann, einzurichten?
>>
>> Besteht auch die Möglichkeit, eine "Rundown-Handler" einzurichten, der
>> abläuft, wenn das Service niedergefahren (gestoppt) wird - händisch, aber
>> z.B. auch bei einem System Shutdown?
>>
>> Ich habe es schon mit Win32::Service probiert, aber da scheint nichts
>> Passendes dabei zu sein.
>>
>
> Von Microsoft gibt es die Programme Instsrv.exe und srvany.exe.

Das ist die ganz harte Tour. Srvany kommuniziert nicht mit dem "Dienst".
Deswegen kann der Dienstemanager auch nicht mit dem "Dienst" kommunizieren. Es
gibt u. a. kein "pause" und "stop" knallt die Anwendung eiskalt weg. Aus der
Anwendung kann ich auch nicht sagen, ich bin noch "beim Starten" oder sonst
was. Zu testen bliebe noch, was passiert, wenn das Script stirbt. Ich nehme an
- nichts, der Dienstemanager wird's wohl nicht erfahren. Aber das ist nur eine
Vermutung.

Im Grunde ist das ein billiger, schmutziger Fake. Zugegeben, manchmal reicht
das. Ferry wollte wohl mehr.

Gruß,
Peter

Re: Perl Skript als W32 Service?

am 14.09.2007 12:30:42 von Ferry Bolhar

Peter Arnhold:

>> Ich habe es schon mit Win32::Service probiert, aber da scheint nichts
>> Passendes dabei zu sein.
>
> schau mal hier:
> http://www.roth.net/perl/Daemon/

SUPER! Das _wäre_ genau das, was ich brauche. Wohlgemerkt,
_wäre_. Denn leider gibt es das Modul (Win32::Daemon) nur für
5.005 und 5.6. Ich habe aber schon 5.8.8 laufen und möchte
eigentlich nicht zurücksteigen (bzw. kann wahrscheinlich auch gar
nicht mehr; ist nicht mein Rechner, es laufen etliche andere Perl-
Applikationen auch dort).

Hat vielleicht irgendjemand Win32::Daemon für 5.8 im Einsatz
oder kann mir verraten, woher ich es bekomme?

LG, Ferry

--
Ing Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail: bol@adv.magwien.gv.at

Re: Perl Skript als W32 Service?

am 14.09.2007 13:01:14 von Robert Berghaus

Peter Arnhold schrieb:
> Robert Berghaus schrieb:
[...]

>> Von Microsoft gibt es die Programme Instsrv.exe und srvany.exe.
>=20
> Das ist die ganz harte Tour. Srvany kommuniziert nicht mit dem "Dienst"=

> Deswegen kann der Dienstemanager auch nicht mit dem "Dienst" kommunizie=
ren. Es
> gibt u. a. kein "pause" und "stop" knallt die Anwendung eiskalt weg. Au=
s der
> Anwendung kann ich auch nicht sagen, ich bin noch "beim Starten" oder s=
onst
> was. Zu testen bliebe noch, was passiert, wenn das Script stirbt. Ich n=
ehme an
> - nichts, der Dienstemanager wird's wohl nicht erfahren. Aber das ist n=
ur eine
> Vermutung.
>=20
> Im Grunde ist das ein billiger, schmutziger Fake. Zugegeben, manchmal r=
eicht
> das. Ferry wollte wohl mehr.

Es war ca. 2002 als der "Dienst" laufen sollte und es funktioniert=20
immer noch. Das Messwerterfassungsprogramm (aus 2006) kann ich=20
remote austauschen (net stop ..., net start ...) und danach läuft=20
das neue (und läuft, und läuft, und läuft).
Win32::Service kannte ich bisher noch nicht, werde es aber mal=20
sehr vorsichtig ausprobieren. Immerhin läuft das Programm jetzt=20
seit einem halben Jahr ununterbrochen und speichert Meßwerte ab.

--=20
Schönen Gruß aus dem Bergischen Land
Robert

Re: Perl Skript als W32 Service?

am 14.09.2007 13:02:14 von Peter Arnhold

Ferry Bolhar schrieb:
> Peter Arnhold:
>
>>> Ich habe es schon mit Win32::Service probiert, aber da scheint nichts
>>> Passendes dabei zu sein.
>> schau mal hier:
>> http://www.roth.net/perl/Daemon/
>
> SUPER! Das _wäre_ genau das, was ich brauche. Wohlgemerkt,
> _wäre_. Denn leider gibt es das Modul (Win32::Daemon) nur für
> 5.005 und 5.6. Ich habe aber schon 5.8.8 laufen und möchte
> eigentlich nicht zurücksteigen (bzw. kann wahrscheinlich auch gar
> nicht mehr; ist nicht mein Rechner, es laufen etliche andere Perl-
> Applikationen auch dort).
>
> Hat vielleicht irgendjemand Win32::Daemon für 5.8 im Einsatz
> oder kann mir verraten, woher ich es bekomme?

ich verstehe Dich jetzt nicht. Was ist mit:
http://www.roth.net/perl/packages/win32-daemon.ppd bzw.
http://www.roth.net/perl/packages/x86/Win32/Daemon_5008.tar. gz
?

Gruß,
Peter

Re: Perl Skript als W32 Service?

am 14.09.2007 15:03:48 von Ferry Bolhar

Peter Arbhold:

> Im Grunde ist das ein billiger, schmutziger Fake. Zugegeben, manchmal
reicht
> das. Ferry wollte wohl mehr.

Ja. Das Service hält Dateien und eine DB geöffnet und sollte sicherstellen,
dass vor dem Stoppen diese offenen Kanäle sauber geschlossen werden.
Außerdem möchte ich gerne, falls möglich, auf die geöffneten Datein im
Bedarfsfall ein flush() durchführen, damit interne Buffer weggeschrieben
werden und dies durch ein "net pause" signalisieren. D.h., das Skript soll
mitbekommen, wenn das Service auf "pause" gesetzt wird, das flush()
durchführen und anschließend sich selbst wieder auf "resume" setzen.

Mit Win32::Daemon wäre das im Prinzip alles möglich, nur leider gibt's
das auf http://www.roth.net/perl/Daemon nur für Perl 5.005 und 5.6
(das Modul verwendet eine DLL und ist daher versionsabhängig), und
ich habe schon längere Zeit nur mehr Perl 5.8 im Einsatz.

LG, Ferry

--
Ing Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail: bol@adv.magwien.gv.at

Re: Perl Skript als W32 Service?

am 14.09.2007 16:34:54 von Thomas Kratz

Ferry Bolhar wrote:

> Mit Win32::Daemon wäre das im Prinzip alles möglich, nur leider gibt's
> das auf http://www.roth.net/perl/Daemon nur für Perl 5.005 und 5.6
> (das Modul verwendet eine DLL und ist daher versionsabhängig), und
> ich habe schon längere Zeit nur mehr Perl 5.8 im Einsatz.

Win32::Daemon ist definitiv für 5.8 erhältlich.

http://www.roth.net/perl/packages/Win32-Daemon.ppd

Thomas

--
$/=$,,$_=,s,(.*),$1,see;__END__
s,^(.*\043),,mg,@_=map{[split'']}split;{#>J~.>_an~>>e~...... >r~
$_=$_[$%][$"];y,<~>^,-++-,?{$/=--$|?'"':#..u.t.^.o.P.r.>ha~.e..
'%',s,(.),\$$/$1=1,,$;=$_}:/\w/?{y,_, ,,#..>s^~ht<._..._..c....
print}:y,.,,||last,,,,,,$_=$;;eval,redo}#.....>.e.r^.>l^..>k ^.-

Re: Perl Skript als W32 Service?

am 17.09.2007 17:12:16 von Ferry Bolhar

Peter Arnhold:

> >> schau mal hier:
> >> http://www.roth.net/perl/Daemon/

Tja, auf dieser Seite ist dezidiert als "Latest Version" die
Version 20020606 angegeben, und das ist die, die 5.8
noch nicht unterstützt...

> ich verstehe Dich jetzt nicht. Was ist mit:
> http://www.roth.net/perl/packages/win32-daemon.ppd bzw.
> http://www.roth.net/perl/packages/x86/Win32/Daemon_5008.tar. gz

Vielen Dank - jetzt ist aller klar. Ich habe mich einfach durch
die falsche "Latest Version" täuschen lassen.

Übrigens: weiß vielleicht jemand, wie ich ppm dazu bringen
kann, Authentifizierungsinformation für einen Proxy mitzusenden?
Die Umgebungsvariablen HTTP_USER und HTTP_PASSWD
werden leider nicht berücksichtigt; ich bekomme von unserem
Proxy immer "407 Proxy Authentication Required" zurück.

Nochmals herzlichen Dank!

Schöne Grüße,

Ferry

--
Ing Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail: bol@adv.magwien.gv.at

Re: Perl Skript als W32 Service?

am 17.09.2007 17:26:24 von Bjoern Hoehrmann

* Ferry Bolhar wrote in de.comp.lang.perl.misc:
>Übrigens: weiß vielleicht jemand, wie ich ppm dazu bringen
>kann, Authentifizierungsinformation für einen Proxy mitzusenden?
>Die Umgebungsvariablen HTTP_USER und HTTP_PASSWD
>werden leider nicht berücksichtigt; ich bekomme von unserem
>Proxy immer "407 Proxy Authentication Required" zurück.

Siehe PROXIES in `perldoc lwpcook`. Generell ist es sinnvoller,
neue Fragen in neuen Threads zu stellen.
--
Björn Höhrmann · mailto:bjoern@hoehrmann.de · http://bjoern.hoehrmann.de
Weinh. Str. 22 · Telefon: +49(0)621/4309674 · http://www.bjoernsworld.de
68309 Mannheim · PGP Pub. KeyID: 0xA4357E78 · http://www.websitedev.de/

Re: Perl Skript als W32 Service?

am 18.09.2007 09:57:44 von Ferry Bolhar

Bjoern Hoerhmann:

>> Übrigens: weiß vielleicht jemand, wie ich ppm dazu bringen
>> kann, Authentifizierungsinformation für einen Proxy mitzusenden?
>> Die Umgebungsvariablen HTTP_USER und HTTP_PASSWD
>> werden leider nicht berücksichtigt; ich bekomme von unserem
>> Proxy immer "407 Proxy Authentication Required" zurück.
>
> Siehe PROXIES in `perldoc lwpcook`.

Vielen Dank, das hat mir sehr geholfen.

Zusammenfassend:

ppm verwendet LWP und dessen proxy_env() Methode zum
Holen von Proxy-Information aus dem Environment. Dabei
wird aber (im Falle von http) nur die Variable HTTP_PROXY
berücksichtigt, nicht HTTP_USER und HTTP_PASSWD. Man
kann aber diese Information durch die Notation

http://:@

in HTTP_PROXY aufnehmen. Dann funktioniert es auch mit
Proxy-Authentifizierung.

> Generell ist es sinnvoller, neue Fragen in neuen Threads zu stellen.

Da hast du recht. Es sollte aber möglich sein (soferne der News-
Client es unterstützt) nach Begriffen in Beiträgen zu suchen und
auch so zu Informationen zu kommen. Aber klarer ist es natürlich
in einem eigenen Thread.

Nochmals vielen Dank & LG,

Ferry

--
Ing Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail: bol@adv.magwien.gv.at