user1754280
user1754280

Reputation: 61

How do I run a Java .jar file as a Windows service on Windows Server 2008?

How do I run a Java .jar file as a Windows service on a Windows 2008 server? I have a jar file called SomeJavaFile.jar located under the C:\SomeDirectory directory on a Windows Server 2008 box. I usually just run this jar manually in the command line with: java –cp SomeJavaFile.jar com.ctg.SomeJavaFile and I let it run 24/7.

The problem with our Windows Server is if it restarts I need to run it as a service so it will automatically start as a service upon startup, because our processing for Vistakon runs 24/7. I have Googled around and tried to use a service wrapper and the sc.exe command to create the service.

I put the wrapper service.exe in the C:\SomeDirectory\. I use the following command to create it: sc.exe SomeJavaService binPath= “C:\SomeDirectory\service.exe \”java –jar C:\SomeDirectory\SomeJavaFile.jar\”” type= own start= auto error= ignore. This creates the SomeJavaService service correctly but when I try to start it I get an error that says the service on Local Computer started then stopped.

Some services stop automatically if they are not in use by other services or programs. Do I need to alter my sc.exe command to have the exact previous working command line maybe, by adding in the com.ctg.SomeJavaFile? So should I change This jar should just run in the background and constantly poll/ping the C:/poll directory then if there is data present it processes the data and sends an export file to another directory.

I have used this same .jar file for years successfully and it hasn't changed, but I cannot get it to run as a Windows service. This is the site I use to get the service wrapper http://code.google.com/p/simple-service-wrapper/. Any help would be greatly appreciated!

Upvotes: 6

Views: 16196

Answers (5)

Meloman
Meloman

Reputation: 3712

The following solution is working fine for me having OpenFire Connection Manager (which is a jar file) running as service on Windows Server.

Download and install the Non-Sucking Service Manager

I didn't use the batch made by OpenFire team, because it didn't work for me (dependencies not found error...) So, make a batch file with the following code :

@ECHO OFF

cd /D "E:\connection_manager\lib"
java -jar startup.jar

and save it as cm_startup.bat in the bin folder of connection manager.

After that you can create the service with NSSM. So, open a cmd.exe and run the following command :

 nssm install ConnManager "E:\connection_manager\lib\cm_startup.bat"

.

Doc & examples

More documentation and examples for the Non-Sucking Service Manager here : https://nssm.cc/usage Actually NSSM as a lot of options available.

Here is a more complexe example :

nssm install solr "%JavaExe%" -Dsolr.solr.home="\"%CD%\solr"\"
-Djetty.home="\"%CD%"\" -Djetty.logs="\"%CD%\logs"\" -cp
"\"%CD%\lib\*.jar"\";"\"%CD%\start.jar"\" -jar "\"%CD%\start.jar"\"

Upvotes: 0

Arun Pratap
Arun Pratap

Reputation: 96

As per my analysis,

The Idle Solution will be writing a VC++ (.net) Windows Service creation program to launch the .bat (that triggers the jar file)/.exe as a System service with all the required call back methods to SCM.

Note : 1. Wrapping the process with sc.exe / srvany.exe would not work as it does not have any call back process to the SCM (Service Control Manager). 2. And java service Wrapper is a third party API (many are LGPL licensed).

Upvotes: 1

"winsw" is the standalone version of the Windows Service installer shipping with the Glassfish Java EE reference implementation.

Works well, but is not a fully polished product - I have used it for exactly this purpose for a couple of years. Requires .NET in some recent version on the Windows machine.

https://github.com/kohsuke/winsw

Upvotes: 4

Christian Kuetbach
Christian Kuetbach

Reputation: 16060

If you start your Java code from commandline by using java -j some.jar does it run until you terminate the program, or does it stop by itself?

There needs to be a NON-Deamon Thread, that is running all the time. A JVM will terminate, if there is no thread running, that is not flagged as daemon.

If you have a little budget, buy an installer tool. I use instll4j. With that tool, you can create service launcher and install them during instllation.

Upvotes: 0

aleroot
aleroot

Reputation: 72626

I think that the best bet would be wrap your java app with Procrun of Apache Commons Daemon .

Procrun is a set of applications that allow Windows users to wrap (mostly) Java applications (e.g. Tomcat) as a Windows service.

The service can be set to automatically start when the machine boots and will continue to run with no user logged onto the machine.

Upvotes: 1

Related Questions