do it. think it. blog it! ... a twisted world

Monday May 30, 2005

Hi, I had to reinvent the wheel again today (or was it yesterday ?), just to make my preinstalled Tomcat server on windows to run as a service, I did not want to reinstall Tomcat, but rather wanted a short fix to make my pre-installed tomcat server run as a service in windows. I have done this several times in the past but had forgotten to remember the exact process... hence this post as It'd help me (of all the people) remember. Here's how I did it: SO: If you want to run tomcat as a windows service, there are two ways to do it. Once is while installing choose to install as service, or if you already have installed it through command line, then you can run the following command to install tomcat as a service.
%CATALINA_HOME%bintomcat ­­­­-install “Apache Tomcat” “%JAVA_HOME%jrebinclassicjvm.dll” ­­­­­­-Djava.class.path="%CATALINA_HOME%binbootstrap.jar;%JAVA_HOME%libtools.jar” ­­­­­­-Dcatalina.home="%CATALINA_HOME%” ­­­­­­-Xrs ­­­­­­-start org.apache.catalina.startup.Bootstrap ­­­­­­-params start ­­­­­­-stop org.apache.catalina.startup.Bootstrap ­­­­­­-params stop ­­­­­­-out “%CATALINA_HOME%logsstderr.log”
The above command will install tomcat as a service. If this fails then its possible that tomcat.exe is not there in %CATALINA_HOME%bin directory. You can just download tomcat again and extract tomcat.exe and put this into the directory. (I was not having this in my tomcat local directory because when installing for the first time I choose NOT to install it as a service). After installing the service, you can either go to control panel/administrative tools/services and start and stop the service, or you can run it from command line net start “Apache Tomcat” // to start the service net stop “Apache Tomcat” // to stop the service. If you ever want to uninstall tomcat as a service you can run this command “%CATALINA_HOME%bintomcat.exe” -uninstall “Apache Tomcat” Service not starting issues.. When I did this my service did not start properly, and I went to the event viewer log to see the problem. It was not able to find jvm.dll in the path so I had to search and correct the path for dll and things worked just fine. Note that when I made the path change, I had to first uninstall the service and then install it again to make life easier: (the following code would do the trick. Simple save this is servcie.bat in your tomcat/bin directory and run it) : This code aint mine. It's from Mark Turk
@echo off if "%OS%" == "Windows_NT" setlocal rem rem NT Service Install/Uninstall script rem rem Options rem install Install the service using Tomcat5 as service name. rem Service is installed using default settings. rem remove - Remove the service from the System. rem rem name (optional) If the second argument is present it is considered rem to be new service name rem rem $Id: service.bat,v 1.5 2004/04/08 16:49:37 mturk Exp $ rem ------------------------------------------------------ rem Guess CATALINA_HOME if not defined set CURRENT_DIR=%cd% if not "%CATALINA_HOME%" == "" goto gotHome set CATALINA_HOME=%cd% if exist "%CATALINA_HOME%\bin\tomcat5.exe" goto okHome rem CD to the upper dir cd .. set CATALINA_HOME=%cd% :gotHome if exist "%CATALINA_HOME%\bin\tomcat5.exe" goto okHome echo The tomcat.exe was not found... echo The CATALINA_HOME environment variable is not defined correctly. echo This environment variable is needed to run this program goto end :okHome if not "%CATALINA_BASE%" == "" goto gotBase set CATALINA_BASE=%CATALINA_HOME% :gotBase set EXECUTABLE=%CATALINA_HOME%\bin\tomcat5.exe rem Set default Service name set SERVICE_NAME=Tomcat5 if "%1" == "" goto displayUsage if "%2" == "" goto setServiceName set SERVICE_NAME=%2 :setServiceName if %1 == install goto doInstall if %1 == remove goto doRemove echo Unknown parameter "%1" :displayUsage echo echo Usage: service.bat install/remove [service_name] goto end :doRemove rem Remove the service "%EXECUTABLE%" //DS//%SERVICE_NAME% echo The service '%SERVICE_NAME%' has been removed goto end :doInstall rem Install the service rem Use the environment variables as an exaple rem Each command line option is prefixed with PR_ set PR_DISPLAYNAME=Apache Tomcat set PR_DESCRIPTION=Apache Tomcat Server - http://jakarta.apache.org/tomcat set PR_INSTALL=%EXECUTABLE% set PR_LOGPATH=%CATALINA_HOME%\logs set PR_CLASSPATH=%CATALINA_HOME%\bin\bootstrap.jar "%EXECUTABLE%" //IS//%SERVICE_NAME% ­­­­­­-­­­­­­-Jvm auto ­­­­­­-­­­­­­-StartClass org.apache.catalina.startup.Bootstrap ­­­­­­-­­­­­­-StopClass org.apache.catalina.startup.Bootstrap ­­­­­­-­­­­­­-StartParams start ­­­­­­-­­­­­­-StopParams stop rem Clear the environment variables. They are not needed any more. set PR_DISPLAYNAME= set PR_DESCRIPTION= set PR_INSTALL= set PR_LOGPATH= set PR_CLASSPATH= rem Set extra parameters "%EXECUTABLE%" //US//%SERVICE_NAME% ­­­­­­-­­­­­­-JvmOptions "­­­­­­-Dcatalina.base=%CATALINA_BASE%;­­­­­­-Dcatalina.home=%CATALINA_HOME%;­­­­­­-Djava.endorsed.dirs=%CATALINA_HOME%\common\endorsed" ­­­­­­-StartMode jvm ­­­­­­-­­­­­­-StopMode jvm rem More extra parameters set PR_STDOUTPUT=%CATALINA_HOME%\logs\stdout.log set PR_STDERROR=%CATALINA_HOME%\logs\stderr.log "%EXECUTABLE%" //US//%SERVICE_NAME% ++JvmOptions "­­­­­­-Djava.io.tmpdir=%CATALINA_BASE%\temp" echo The service '%SERVICE_NAME%' has been installed :end cd %CURRENT_DIR%