2012-10-17 7 views
5

Hallo allerseits, wie führe ich eine Java-JAR-Datei als Windows-Dienst auf einem Windows 2008-Server? Ich habe eine JAR-Datei mit dem Namen SomeJavaFile.jar im Verzeichnis C: \ SomeDirectory in einer Windows Server 2008-Box. Ich verwende dieses jar normalerweise nur manuell in der Kommandozeile mit: java -cp SomeJavaFile.jar com.ctg.SomeJavaFile und lasse es 24/7 laufen.Wie führe ich eine Java-JAR-Datei als Windows-Dienst auf Windows Server 2008?

Das Problem mit unserem Windows-Server ist, wenn es neu startet Ich muss es als Dienst ausführen, damit es automatisch als Dienst beim Start gestartet wird, weil unsere Verarbeitung für Vistakon 24/7 läuft. Ich habe gegoogelt und versucht, einen Dienstwrapper und den Befehl sc.exe zu verwenden, um den Dienst zu erstellen.

Ich legte die Wrapper-Service.exe in das C: \ SomeDirectory \. Ich benutze den folgenden Befehl, um es zu erstellen: sc.exe SomeJavaService binPath = "C: \ SomeDirectory \ service.exe" java -jar C: \ SomeDirectory \ SomeJavaFile.jar "" type = eigene Start = auto error = ignore. Dies erstellt den SomeJavaService-Dienst korrekt, aber wenn ich versuche, ihn zu starten, erhalte ich einen Fehler, der besagt, dass der Dienst auf dem lokalen Computer gestartet und dann gestoppt wurde.

Einige Dienste werden automatisch beendet, wenn sie nicht von anderen Diensten oder Programmen verwendet werden. Muss ich meinen sc.exe Befehl ändern, um die vorhergehende funktionierende Befehlszeile vielleicht zu haben, indem ich com.ctg.SomeJavaFile hinzufüge? Also sollte ich ändern Dieses jar sollte einfach im Hintergrund laufen und ständig das C:/poll-Verzeichnis abfragen/pingen. Wenn Daten vorhanden sind, verarbeitet es die Daten und sendet eine Exportdatei an ein anderes Verzeichnis.

Ich habe die gleiche .jar-Datei seit Jahren erfolgreich verwendet und es hat sich nicht geändert, aber ich kann es nicht als Windows-Dienst ausführen. Dies ist die Site, die ich verwende, um den Service Wrapper http://code.google.com/p/simple-service-wrapper/ zu erhalten. Jede Hilfe würde sehr geschätzt werden!

 Shane 
+0

Willkommen bei Stack Overflow. Bitte lesen Sie die FAQ und formatieren Sie Ihre Fragen, damit sie leichter zu lesen sind. –

Antwort

0

Wenn Sie Ihren Java-Code von Befehlszeile gestartet von java -j some.jar verwenden, funktioniert aber es, bis Sie das Programm ausführen beenden, oder es von selbst aufhört?

Es muss ein NON-Deamon Thread sein, der ständig läuft. Eine JVM wird beendet, wenn kein Thread läuft, der nicht als Daemon gekennzeichnet ist.

Wenn Sie ein kleines Budget haben, kaufen Sie ein Installationsprogramm. Ich benutze instll4j. Mit diesem Tool können Sie Service Launcher erstellen und während der Installation installieren.

3

"winsw" ist die eigenständige Version des Windows Service-Installationsprogramms, das mit der Glassfish Java EE-Referenzimplementierung geliefert wird.

Funktioniert gut, ist aber kein vollständig poliertes Produkt - ich habe es seit ein paar Jahren für genau diesen Zweck verwendet. Benötigt .NET in einigen aktuellen Versionen auf dem Windows-Rechner.

https://github.com/kohsuke/winsw

+0

Benötigt .Net Framework 3.5 ab der aktuellen Version (1.9). – DonBecker

1

Ich denke, dass die beste Wette Ihre Java-Anwendung mit Procrun von Apache Commons Daemon wickeln würde.

Procrun ist eine Reihe von Anwendungen, die Windows-Benutzer erlauben (meist) von Java-Anwendungen (zum Beispiel Tomcat) als Windows-Dienst zu wickeln.

Der Dienst kann so eingestellt werden, dass er automatisch startet, wenn der Computer bootet und weiterhin ausgeführt wird, ohne dass ein Benutzer am Computer angemeldet ist.

1

Wie pro meine Analyse,

Die Idle-Lösung ein VC++ zu schreiben (.net) Windows-Dienst-Erstellungsprogramm wird die .bat zu starten (das löst die JAR-Datei) /. Exe als Systemdienst mit allen erforderlichen Rückrufmethoden zu SCM.

Hinweis: 1. Das Verarbeiten des Prozesses mit sc.exe/srvany.exe würde nicht funktionieren, da es keinen Rückrufprozess zu dem SCM (Service Control Manager) hat. 2. Und Java Service Wrapper ist eine Drittanbieter-API (viele sind LGPL lizensiert).

Verwandte Themen