# apache service wrapper



## baumtopf (25. Apr 2012)

apache service wrapper
Hallo Chipuser,

Zu meiner Person, ich bin Java Junior Entwickler

Ich habe folgendes Problem, mein Chef befindet sich im Urlaub. Er hat mir folgende Aufgabe gegeben:
1. Aufgabe: ich soll mir den apache service wrapper für windows anschauen und verstehen:
Daemon : Procrun

Ich komm schon mit dem ersten Satz nicht klar: "Procrun is a set of applications that allow Windows users to wrap (mostly) Java applications (e.g. Tomcat) as a Windows service."

Zu diesem Satz habe ich zwei Fragen:

A. Warum kann der Windows User nur durch diese Applikation auf die Java Applikationen zugreifen, konnte er es zuvor nicht?
B. Unter Absatz, Procrun monitor application gibt es den Ausdruck: //ServiceName parameter, was ist ein //ServiceName parameter?
C.In der nächsten Zeile steht: the Prunmgr application will remove a trailing w (lower-case w) from the name.
Warum muss ich das wissen?
D.Unter Absatz, Command line parameters, gibt es jede Menge Commands, aber in welchem Programm soll ich diese anwenden?

Anschliessend war ich noch auf dieser Seite:

http://wrapper.tanukisoftware.com/do...oad.jsp#stable

und dieses Paket heruntergeladen: wrapper-windows-x86-64-3.5.14-st

im wrapper-windows-x86-64-3.5.14-st\bin\TestWrapper gestartet und da gab einige Knöpfe zum Drücken z.B. Stop(0), Stop(1), Exit(0), Exit(1).

Die Knöpfe sagen mir nichts oder hilft mir dieser Download nichts zum Verständnis?


2. Aufgabe: ich soll ein kleines Java Test Projekt bauen

Wie soll ich jetzt vorgehen?
Ich habe bisher mit Java Eclipse programmiert, kleine plugins und Web Applikationen. Aber zu diesem Thema steige ich gerade nicht ein.
inwieweit kann mir dieser Link Daemon : Procrun helfen ein kleines Java Test Projekt zu bauen?

3. Aufgabe: den service wrapper auf meinem Windows Rechner testen.

Wenn mir jemand helfen kann, würde mich das sehr freuen!

Gruss, Jürgen


----------



## nillehammer (25. Apr 2012)

> Ich komm schon mit dem ersten Satz nicht klar: "Procrun is a set of applications that allow Windows users to wrap (mostly) Java applications (e.g. Tomcat) as a Windows service."


Es gibt Programme (z.B. ein Webserver), die man ständig im *Hintergrund* laufen haben will. Außerdem möchte man, dass sie idealerweise beim Hochfahren des Systems automatisch gestartet werden. Darüber hinaus haben sie evtl. Abhängigkeiten zu anderen Programmen, die vorher gestartet sein müssen. Unter Windows kann man solche Programme als sog. Service (deutsch: Dienst) konfigurieren. Zu finden bei Windows unter "Computerverwaltung -> Dienste (englisch: "Administrative Tools -> Services"). Bei Unix heißt ein ähnlicher Mechanismus übrigens _Daemon_, aber hier ist das Konzept zur Konfiguration und Start etwas anders.

Nun ist es ja denkbar, dass man gerne eine Java-Application als Dienst laufen lassen möchte. Tomcat (ein Javabasierter Webcontainer) wäre dafür ein gutes Beispiel. Das geht mit Java aber nicht direkt. Man muss also einen Wrapper haben, der beim Systemstart vom Betriebssystem aufgerufen werden kann und der sich dann um das Starten der Java-Application kümmert.



> A. Warum kann der Windows User nur durch diese Applikation auf die Java Applikationen zugreifen, konnte er es zuvor nicht?


Es geht nicht darum, dass ein User eine Java-Applikation starten kann, sondern, dass dies beim Hochfahren automatisch mit den Mitteln des jeweiligen Betriebssystems geschieht.



> B. Unter Absatz, Procrun monitor application gibt es den Ausdruck: //ServiceName parameter, was ist ein //ServiceName parameter?


Unter Windows haben alle Dienste einen Namen. Wenn Du einen neuen Dienst einrichten willst, musst Du einen vergeben.



> C.In der nächsten Zeile steht: the Prunmgr application will remove a trailing w (lower-case w) from the name. Warum muss ich das wissen?


Da kann ich nur spekulieren. Ich nehme an, weil das Programm zum Starten einer JVM *ohne* Konsolenfenster 
	
	
	
	





```
javaw.exe
```
 heißt, man aber in der Übersicht einfach sehen will, dass es ein Java-Programm ist, was da als Dienst läuft.



> D.Unter Absatz, Command line parameters, gibt es jede Menge Commands, aber in welchem Programm soll ich diese anwenden?


Das sind die Parameter, die Du dem zu startenden Dienst übergeben willst. Was da reinkommt, hängt von dem zu startenden Dienst ab.


----------



## baumtopf (26. Apr 2012)

Ach so!

Ich glaube, dass meine Aufgabe darin besteht, dass ich erstens einen (Windows-) Dienst wie den apache service wrapper herutnerlade, wie z.B. dieses procrum von 

commons-daemon-1.0.10-bin.zip
Download Commons Daemon
Daemon : Procrun

und auf meinem Windows 7 entzippe. Zweitens ein Java Test Projekt baue für procrum zum Testen.
Der Test besteht darin, dass procrun es schafft, das Java Test Projekt automatisch auf Windows 7 beim Hochfahren zu starten und dass während der PC abgemeldet ist, das Java Test Projekt im Hintergrund weiterläuft, habe ich das so richtig verstanden?

Daemon : Procrun
Sind diese "command line options" und "Command line parameters" DOS-Commandos, die ich unter "desktop -> start -> cmd" eintippen und ausführen kann? wie z.B. cd directoryname oder cd.., oder format c:
??

Gruss, Jürgen


----------



## nillehammer (26. Apr 2012)

baumtopf hat gesagt.:
			
		

> und auf meinem Windows 7 entzippe. Zweitens ein Java Test Projekt baue für procrum zum Testen.
> Der Test besteht darin, dass procrun es schafft, das Java Test Projekt automatisch auf Windows 7 beim Hochfahren zu starten und dass während der PC abgemeldet ist, das Java Test Projekt im Hintergrund weiterläuft, habe ich das so richtig verstanden?


Ja genau!


			
				baumtopf hat gesagt.:
			
		

> Sind diese "command line options" und "Command line parameters" DOS-Commandos, die ich unter "desktop -> start -> cmd" eintippen und ausführen kann? wie z.B. cd directoryname oder cd.., oder format c:
> ??


Genau, bei 
	
	
	
	





```
format c:
```
 ist "c:" eine Commandline-Option für das Kommando "format". Bei Java gibt es das auch. Es gibt sprezielle Parameter für die JVM (bspw. Xmx=256M), Properties (bspw. -Ddb.password=xxx) und Argumente, die man in der main-Methode auswerten kann (bspw. hallo welt).


----------



## baumtopf (26. Apr 2012)

Hallo Nillehammer,

vielen Dank für deine Antwort. Ich habe mir procrun heruntergeladen: 

Download Commons Daemon --> commons Deamon 1.0.1.0 --> Binaries --> commons-daemon-1.0.10-bin.zip

Aber als ich entzippt habe, fand ich darunter keine Exe.Dateien, brauch ich überhaupt Exe.Dateien zum Ausführen?

Daraufhin habe ich weiter gesucht und bin auf folgende Quelle gestossen:

people.apache.org/~mturk/daemon-1.0.10/binaries/windows/

Da habe ich folgende Datei heruntergeladen:

commons-daemon-1.0.10-bin-windows.zip 

Dann im Windows entzippt und folgende Exe.Dateien gefunden:

prunmgr.exe und prunsrv.exe. 

Wenn ich auf prunmgr.exe drücke, kommt diese Fehlmeldung: "Der angegebene Dienst ist kein installierter Dienst. Unable to open the service 'prunmgr'".

Wenn ich prunsrv.exe ausführe, kommt diese Fehlermeldung:

C:\commons-daemon-1.0.10-bin-windows>prunsrv.exe
[2012-04-26 14:12:53] [warn]  The system cannot find the Registry key for servic
e 'prunsrv'
[2012-04-26 14:12:53] [error] Load configuration failed
[2012-04-26 14:12:53] [error] Das System kann die angegebene Datei nicht finden.

[2012-04-26 14:12:53] [error] Commons Daemon procrun failed with exit value: 2 (
Failed to load configuration)
[2012-04-26 14:12:53] [error] Das System kann die angegebene Datei nicht finden.

Anschliessend war ich auf dieser Seite: 
Daemon : binaries

Und habe folgende Zeilen geslesen:
The Windows archive (e.g. commons-daemon-1.0.10-bin-windows.zip) contains 2 different executables:

    prunsrv.exe - service application for running applications as services.
    prunmgr.exe - the GUI manager application used to monitor and configure installed services.

There is only one prunmgr.exe application for all architectures. The prunsrv.exe executable is available in 3 different versions for different architectures. The version in the top-level directory is for 32-bit (x86) architectures. _The lower level directories are for 64-bit systems:_

    amd64 - AMD/EMT 64-bit
_ia64 - Intel Itanium 64-bit_

The Windows application prunsrv.exe is used to install an application as a service. Once installed, prunmgr.exe can be used to monitor and reconfigure the service. (see procrun for more information). The Windows binary zip archive should be unpacked into the location from which you wish to run it, for example: %ProgramFiles%\Apache Commons Daemon

Da ich Windows 7 mit einem Intel Core und 64Bit Version habe, bin ich dieser Anweisung gefolgt:
_The lower level directories are for 64-bit systems:_
_ia64 - Intel Itanium 64-bit_

C:\commons-daemon-1.0.10-bin-windows\ia64>prunsrv.exe
Aber leider kam dann diese Meldung heraus:

C:\commons-daemon-1.0.10-bin-windows\ia64>prunsrv.exe
Die Version von C:\commons-daemon-1.0.10-bin-windows\ia64\prunsrv.exe ist nicht
mit der ausgeführten Windows-Version kompatibel. Öffnen Sie die Systeminformatio
nen des Computers, um zu überprüfen, ob eine x86-(32 Bit)- oder eine x64-(64 Bit
)-Version des Programms erforderlich ist, und wenden Sie sich anschließend an de
n Herausgeber der Software.

Was habe ich falsch gemacht?


Noch etwas anderes und zwar zum zweiten Zitat:



> Sind diese "command line options" und "Command line parameters" DOS-Commandos, die ich unter "desktop -> start -> cmd" eintippen und ausführen kann? wie z.B. cd directoryname oder cd.., oder format c:
> ??



Zu diesem Zitat wollte ich wissen, ob die command line options wie auf dieser Seite:

Daemon : Procrun

z.B. //ServiceName, //ES und set PR_CLASSPATH=xx.jar den DOS Commandos entsprechen?


----------



## baumtopf (27. Apr 2012)

Hallo Java Entwickler,

Kann mir niemand sagen wie ich mit diesen Fehlermeldungen umgehen soll?

C:\commons-daemon-1.0.10-bin-windows>prunsrv.exe
[2012-04-26 14:12:53] [warn] The system cannot find the Registry key for servic
e 'prunsrv'
[2012-04-26 14:12:53] [error] Load configuration failed
[2012-04-26 14:12:53] [error] Das System kann die angegebene Datei nicht finden.

[2012-04-26 14:12:53] [error] Commons Daemon procrun failed with exit value: 2 (
Failed to load configuration)
[2012-04-26 14:12:53] [error] Das System kann die angegebene Datei nicht finden.

oder

C:\commons-daemon-1.0.10-bin-windows\ia64>prunsrv.exe
Die Version von C:\commons-daemon-1.0.10-bin-windows\ia64\prunsrv.exe ist nicht
mit der ausgeführten Windows-Version kompatibel. Öffnen Sie die Systeminformatio
nen des Computers, um zu überprüfen, ob eine x86-(32 Bit)- oder eine x64-(64 Bit
)-Version des Programms erforderlich ist, und wenden Sie sich anschließend an de
n Herausgeber der Software.


----------



## Guybrush Threepwood (27. Apr 2012)

Hi,
ich bin auch gerade am recherchieren. Unter Daemon : Java based daemons or services findet sich die Aussage:


> Both Win32 and UNIX like platforms are supported. For Win32 platforms use procrun. For UNIX like platforms use jsvc.


Möglicherweise gibt es also bei 64Bit Probleme. Ganz so problematisch scheint es aber nicht zu sein, da auf Daemon : Procrun wiederum das Folgende zu lesen ist:


> On 64-bit Windows procrun always uses 32-bit registry view for storing the configuration.


Da Du keinen Itanium hast, sondern Intel Core mit 64Bit, solltests wohl besser die 32Bit-Version nutzen.

So wie ich das verstanden habe, muss der Service zuerst installiert werden (//IS parameter). Es werden die entsprechenden Registry-Einträge angelegt. Erst dann kann der Service gestartet werden, imho.

Ciao,
Guybrush


----------



## baumtopf (27. Apr 2012)

Hallo Guybrush,

ich habe auf Daemon : Procrun und nach //IS parameter gesucht. Dabei habe folgende Zeilen gefunden:

prunsrv //IS//TestService --DisplayName="Test Service" \
        --Install=prunsrv.exe --Jvm=auto --StartMode=jvm --StopMode=jvm \
        --StartClass=org.apache.SomeStartClass --StartParams=arg1;arg2;arg3 \
        --StopClass=org.apache.SomeStopClass --StopParams=arg1#arg2

Diese Zeile kopierte ich und führte sie im Windows start, CMD aus
1. Verzeichnis C:\commons-daemon-1.0.10-bin-windows> 
und im 
2. Verzeichnis: C:\commons-daemon-1.0.10-bin-windows\ia64>
aus.

Dabei kam folgende Fehlmeldung aus:



Zu 1.

C:\commons-daemon-1.0.10-bin-windows>prunsrv //IS//TestService --DisplayName="Te
st Service" \
[2012-04-27 11:24:43] [error] Unable to open the Service Manager
[2012-04-27 11:24:43] [error] Zugriff verweigert
[2012-04-27 11:24:43] [error] Commons Daemon procrun failed with exit value: 8 (
Failed to install service)
[2012-04-27 11:24:43] [error] Zugriff verweigert
Zugriff verweigert
Failed to install service
C:\commons-daemon-1.0.10-bin-windows>        --Install=prunsrv.exe --Jvm=auto --
StartMode=jvm --StopMode=jvm \
Der Befehl "--Install" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.

C:\commons-daemon-1.0.10-bin-windows>        --StartClass=org.apache.SomeStartCl
ass --StartParams=arg1;arg2;arg3 \
Der Befehl "--StartClass" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.

C:\commons-daemon-1.0.10-bin-windows>        --StopClass=org.apache.SomeStopClas
s --StopParams=arg1#arg2


Zu 2.

C:\commons-daemon-1.0.10-bin-windows\ia64>prunsrv //IS//TestService --DisplayNam
e="Test Service" \
Die Version von C:\commons-daemon-1.0.10-bin-windows\ia64\prunsrv.exe ist nicht
mit der ausgeführten Windows-Version kompatibel. Öffnen Sie die Systeminformatio
nen des Computers, um zu überprüfen, ob eine x86-(32 Bit)- oder eine x64-(64 Bit
)-Version des Programms erforderlich ist, und wenden Sie sich anschließend an de
n Herausgeber der Software.

C:\commons-daemon-1.0.10-bin-windows\ia64>        --Install=prunsrv.exe --Jvm=au
to --StartMode=jvm --StopMode=jvm \
Der Befehl "--Install" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.

C:\commons-daemon-1.0.10-bin-windows\ia64>        --StartClass=org.apache.SomeSt
artClass --StartParams=arg1;arg2;arg3 \
Der Befehl "--StartClass" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.

C:\commons-daemon-1.0.10-bin-windows\ia64>        --StopClass=org.apache.SomeSto
pClass --StopParams=arg1#arg2
Der Befehl "--StopClass" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.

Bin ich falsch vorgegangen?

Gruss, Jürgen


----------



## Guybrush Threepwood (27. Apr 2012)

Nachdem die Registry-Schlüssel unter HKEY_LOCAL_MACHINE\SYSTEM abgelegt werden könnte es sein, dass Admin-Rechte erforderlich sind. Öffne doch mal die Console mit Adminrechten und probiere es noch einmal. Außerdem musst Du die Startparameter anpassen, z. B. org.apache.SomeStartClass und die zugehörigen Parameter. Diese Klasse gibt es schließlich nicht.

P.S.: Hier mal ein Beispiel bei einem anderen Programm: https://github.com/tinkerpop/rexster/wiki/Wrapping-as-a-Windows-Service


----------



## baumtopf (27. Apr 2012)

Vielen Dank für deine Antwort, Guybrush

ich nehme gerade dein Beispiel durch.

https://github.com/tinkerpop/rexster...indows-Service

Und ich befinde mich im Abschnitt: Configuration and installation

So wie ich das verstanden habe, muss ich %REXSTER_ROOT%\service\installService.bat erstellen.

Dabei finde ich %REXSTER_ROOT% nicht, ist das ein Programm rexster-0.5, das ich installieren muss?

Oder ist dieses rexster-0.5 ein Standardprogramm, welches auf Windows 7 schon vorhanden ist?

Gruss, Jürgen


----------



## Guybrush Threepwood (27. Apr 2012)

baumtopf hat gesagt.:


> Vielen Dank für deine Antwort, Guybrush
> 
> ich nehme gerade dein Beispiel durch.
> 
> ...



Nein, Rexter ist irgendein Programm, um das Du Dich nicht kümmern musst. Es dient lediglich als Beispiel. Die installService.bat ist das Beispiel, das unter "Configuration and installation" dargestellt ist. Du musst eine entsprechende Datei für Dich erstellen, mit den jeweils für Dich gültigen Optionen.


----------



## baumtopf (27. Apr 2012)

Hallo Guybrush,

ich durchnahm dein Beispiel.

1. Dazu lud ich noch rexster-0.5 und kopiert es auf C Verzeichnis .
2. installService.bat mit dem Inhalt aus dem Tutorial erstellt und im selbsterstellten Verzeichnis
C:\rexster-0.5\service gesetzt. Dazu kopierte ich den Inhalt vom Verzeichnis commons-daemon-1.0.10-bin-windows auch in das service Verzeichnis.

Es befinden sich im  C:\rexster-0.5\service folgende files:

Verzeichnis amd64, Verzeichnis ia64, installService.bat mit dem Inhalt aus dem Tutorial, LICENSE.txt, NOTICE.txt, RELEASE-NOTES.txt, Rexster.exe (prunsrv.ext umbenannt in Rexster.exe), Rexsterw.exe
(prunmgr.exe umbenannt in Rexsterw.exe)


Dann habe ich wie in diesem Beispiel aus Tutorial, folgendes Kommando ausgeführt:

C:\rexster-0.5\service>installService.bat "C:\Program Files (x86)\Java\jre6\bin\
client\jvm.dll" C:\rexster-0.5\target\rexster-0.5-standalone
[2012-04-27 15:56:57] [error] Unable to open the Service Manager
[2012-04-27 15:56:57] [error] Zugriff verweigert
[2012-04-27 15:56:57] [error] Commons Daemon procrun failed with exit value: 8 (
Failed to install service)
[2012-04-27 15:56:57] [error] Zugriff verweigert
Zugriff verweigert
Failed to install serviceDer Befehl "--Description" ist entweder falsch geschrie
ben oder
konnte nicht gefunden werden.
Der Befehl "--StartClass" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
Der Befehl "--Classpath" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
Der Befehl "--StartParams" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
Der Befehl "--StopPath" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.

Wie soll ich jetzt vorgehen?
Meinst du, dass diese Fehler durch fehlenende Adminrechte enstanden sind?
Wieso? Ich habe unter Systemsteuerung\Alle Systemsteuerungselemente\Benutzerkonten geschaut und dabei festgestellt, dass mein Account auf "Administrator" eingestellt ist. Wieso soll ich Adminrechte bekommen, wenn ich schon Admin bin? Oder brauch ich noch mehr Rechte?

Was soll ich mit dem Registry-Schlüssel HKEY_LOCAL_MACHINE\SYSTEM machen, soll ich da etwas verändern?

Gruss, Jürgen


----------



## baumtopf (30. Apr 2012)

Kann mir denn keiner helfen?


----------



## baumtopf (2. Mai 2012)

Hallo zurück

@Guybrush, ich wusste nicht wie man als Administrator ausführt, jetzt weiss ich es.

Ich habe jetzt die Error Meldungen ausgeschaltet, indem ich mit der rechten Maustaste auf cmd.exe klicke, öffnet sich ein Kontextmenu und dort finde ich: Als Administrator ausführen. 

Dann führe ich folgende Zeile: installService.bat "C:\Program Files (x86)\Java\jre6\bin\
client\jvm.dll" C:\rexster-0.5\target\rexster-0.5-standalone

und cmd bringt folgende Meldung:

Insert the Rexster Home
usage:
    installService JVM_DLL_location Rexster_Home

Diese Zeile: "installService JVM_DLL_location Rexster_Home" finde ich auch unter dem Beispiel wieder:

https://github.com/tinkerpop/rexster/wiki/Wrapping-as-a-Windows-Service --> installService.bat Beispiel
echo usage:
echo     installService JVM_DLL_location Rexster_Home

Auch bringt cmd nach der Ausführung folgenden Vorschlag:

C:\rexster-0.5\service>client\jvm.dll" C:\rexster-0.5\target\rexster-0.5-standal
one

Was hat das zu bedeuten?

Wenn cmd diese Meldung bringt, wird der Service erstellt. In meinem Beispiel heisst der Service Rexster 0.5. Diesen finde ich unter:

Start\Control Panel\Administrative Tools and then Service

oder auf deutsch:

Start\Systemsteuerung\Alle Systemsteuerungselemente\Verwaltung\Dienste.exe

sobald man Dienste.exe gestartet hat und anschliessend auf die Taste F5 zu drückt, wird Rexster 0.5 aufgelistet.

Ein weiteres Problem kam hinzu, ich konnte Rexster 0.5 unter Dienste.exe nicht starten. Sobald ich versucht habe Rexster 0.5 zu starten, wurde der Startvorgang nach wenigen Sekunden unterbrochen und eine Fehlermeldung kam. "Fehler 0" wurde als Quelle angegeben. Daraus wurde ich nicht schlau.

Auch als ich unter Systemereignisprotokoll geschaut habe, habe ich den Fehler nicht besser verstanden. Irgendwann bin ich selbst auf die Idee gekommen, die exe-Dateien wie  C:\rexster-0.5\service Rexster.exe und Rexsterw.exe zu starten. Diese konnte man auch nicht mit Doppelklick öffnen, sondern musste sie im Context mit: "Administrator ausführen" öffnen. Unter der Kartei "Startup" kann man unter "Image" und "Working Path" Pfade angeben:

z.B. 

Image: C:\rexster-0.5\service\Rexsterw.exe
Working Path: C:\rexster-0.5

Auch habe ich und der Kartei "Log On"  die Selectbox: "Allow service to interact with desktop" angewählt

Anschliessend konnte ich unter Dienste.exe, Rexster 0.5 starten.

Dennoch bleibt mir die Frage, wie kann ich Rexster 0.5 einstellen, dass er auch beim Booten und bei einer Abmeldung Rexster 0.5 aktiv bleibt?

Im Moment, muss ich Rexster 0.5 nach jedem Neustart selbst starten.

Gruss, Jürgen


----------

