web-4/wildfly/docs/contrib/scripts/service/service.bat
2024-12-24 01:21:02 +03:00

566 lines
18 KiB
Batchfile

@echo off
REM -------------------------------------------------------------------------
REM WildFly Service Script for Windows
REM It has to reside in %JBOSS_HOME%\bin
REM It is expecting that prunsrv.exe reside in:
REM %JBOSS_HOME%\bin\service\
REM Easiest way to make it work is to copy whole "service" directory to %JBOSS_HOME%\bin
REM
REM v9 2016-02-16 customize for WildFly, fix working on paths with spaces (Tomaz Cerar)
REM v8 2016-01-20 customize for EAP 7 (Petr Sakar)
REM v7 2014-07-09 added /logpath /startup /config /hostconfig /base /debug
REM simplified/corrected use of quotes
REM
REM v6 was shipped with EAP 6.2.0 and supports all previous versions of 6.x as well.
REM v6 2013-08-21 added /name /desc
REM added /serviceuser /servicepass
REM extended directory checking for versions and locations
REM extended checking on option usage
REM v5 2013-06-10 adapted for EAP 6.1.0
REM v4 2012-10-03 Small changes to properly handles spaces in LogPath, StartPath,
REM and StopPath (George Rypysc)
REM v3 2012-09-14 fixed service log path
REM cmd line options for controller,domain host, loglevel,
REM username,password
REM v2 2012-09-05 NOPAUSE support
REM v1 2012-08-20 initial edit
REM
REM Author: Tom Fonteyne (unless noted above)
REM ========================================================
setlocal EnableExtensions EnableDelayedExpansion
set DEBUG=0
if "%DEBUG%" == "1" (
echo "Debug info enabled"
echo on
)
set "DIRNAME=%~dp0%"
if "%DEBUG%" == "1" (
echo DIRNAME "%DIRNAME%x"
)
if exist "%DIRNAME%..\jboss-modules.jar" (
REM we are in JBOSS_HOME/bin
set "WE=%DIRNAME%..\"
goto :WE_FOUND
) else if exist "%DIRNAME%..\..\jboss-modules.jar" (
REM we are in bin\service in a WildFly installation
set "WE=%DIRNAME%..\..\"
goto :WE_FOUND
) else if exist "%DIRNAME%..\..\..\jboss-modules.jar" (
REM we are in sbin in a 6.0.x installation
set "WE=%DIRNAME%..\..\..\"
goto :WE_FOUND
) else (
REM we should be in sbin in 6.1 and up
set "WE=%DIRNAME%..\..\..\..\..\..\"
)
if "%DEBUG%" == "1" (
echo WE was not found, using "%WE%"
)
:WE_FOUND
if "%DEBUG%" == "1" (
echo WE "%WE%"
)
pushd "%WE%"
set "RESOLVED_JBOSS_HOME=%CD%"
popd
set WE=
set DIRNAME=
if "x%JBOSS_HOME%" == "x" (
set "JBOSS_HOME=%RESOLVED_JBOSS_HOME%"
)
pushd "%JBOSS_HOME%"
set "SANITIZED_JBOSS_HOME=%CD%"
popd
if "%DEBUG%" == "1" (
echo SANITIZED_JBOSS_HOME="%SANITIZED_JBOSS_HOME%"
echo RESOLVED_JBOSS_HOME="%RESOLVED_JBOSS_HOME%"
echo JBOSS_HOME="%JBOSS_HOME%"
)
if not "%RESOLVED_JBOSS_HOME%x" == "%SANITIZED_JBOSS_HOME%x" (
echo WARNING JBOSS_HOME may be pointing to a different installation - unpredictable results may occur.
goto cmdEnd
)
rem Find jboss-modules.jar to check JBOSS_HOME
if not exist "%JBOSS_HOME%\jboss-modules.jar" (
echo Could not locate "%JBOSS_HOME%\jboss-modules.jar"
goto cmdEnd
)
set PRUNSRV=
if "%PROCESSOR_ARCHITECTURE%"=="AMD64" (
echo Using the X86-64bit version of prunsrv
set PRUNSRV="%JBOSS_HOME%\bin\service\amd64\wildfly-service"
) else (
echo Using the X86-32bit version of prunsrv
set PRUNSRV="%JBOSS_HOME%\bin\service\wildfly-service"
)
if "%DEBUG%" == "1" (
echo PRUNSRV %PRUNSRV%
)
echo(
rem defaults
set SHORTNAME=WildFly
set DISPLAYNAME=WildFly
rem NO quotes around the description here !
set DESCRIPTION=WildFly Application Server
set CONTROLLER=localhost:9990
set DC_HOST=primary
set IS_DOMAIN=false
set LOGLEVEL=INFO
set ENV_VARS=
set LOGPATH=
set JBOSSUSER=
set JBOSSPASS=
set PROPERTIES_PATH=
set SERVICE_USER=
set SERVICE_PASS=
set STARTUP_MODE=manual
set ISDEBUG=
set CONFIG=
set HOSTCONFIG=host.xml
set BASE=
set COMMAND=%1
shift
if /I "%COMMAND%" == "install" goto cmdInstall
if /I "%COMMAND%" == "uninstall" goto cmdUninstall
if /I "%COMMAND%" == "start" goto cmdStart
if /I "%COMMAND%" == "stop" goto cmdStop
if /I "%COMMAND%" == "restart" goto cmdRestart
echo ERROR: invalid command
:cmdUsage
echo WildFly Service Script for Windows
echo Usage:
echo(
echo service install ^<options^> , where the options are:
echo(
echo /startup : Set the service to auto start
echo Not specifying sets the service to manual
echo(
echo /jbossuser ^<username^> : JBoss username to use for the shutdown command.
echo(
echo /jbosspass ^<password^> : Password for /jbossuser
echo(
echo /controller ^<host:port^> : The host:port of the management interface.
echo default: %CONTROLLER%
echo(
echo /host [^<domainhost^>] : Indicates that domain mode is to be used,
echo with an optional domain/host controller name.
echo default: %DC_HOST%
echo Not specifying /host will install JBoss in
echo standalone mode.
echo(
echo Options to use when multiple services or different accounts are needed:
echo(
echo /name ^<servicename^> : The name of the service
echo default: %SHORTNAME%
echo(
echo /display ^<displayname^> : The display name of the service, use double
echo quotes to allow spaces.
echo Maximum 256 characters.
echo default: %DISPLAYNAME%
echo(
echo /desc ^<description^> : The description of the service, use double
echo quotes to allow spaces.
echo Maximum 1024 characters.
echo default: %DESCRIPTION%
echo(
echo /serviceuser ^<username^> : Specifies the name of the account under which
echo the service should run.
echo Use an account name in the form of
echo DomainName\UserName
echo default: not used, the service runs as
echo Local System Account.
echo(
echo /servicepass ^<password^> : password for /serviceuser
echo(
echo Advanced options:
echo(
echo /config ^<xmlfile^> : The server-config to use
echo default: standalone.xml / domain.xml
echo(
echo /hostconfig ^<xmlfile^> : domain mode only, the host config to use
echo default: host.xml
echo(
echo /base ^<directory^> : The base directory for server/domain content
echo Must be specified as a fully qualified path
echo default: %JBOSS_HOME%\standalone or
echo %JBOSS_HOME%\domain
echo(
echo /environment ^<env^> : List of key=value pairs that will be provided
echo to the service as environment variables.
echo Pairs are separated by either the # or ; character.
echo If a # or ; appears in a key or value,
echo wrap it in single quotes.
echo default: none
echo(
echo /loglevel ^<level^> : The log level for the service: Error, Info,
echo Warn or Debug ^(Case insensitive^)
echo default: %LOGLEVEL%
echo(
echo /logpath ^<path^> : Path of the log
echo default depends on domain or standalone mode
echo /base applies when /logpath is not set.
echo %JBOSS_HOME%\domain\log
echo %JBOSS_HOME%\standalone\log
echo(
echo /properties ^<path^> : Path of the properties file to pass to the
echo process for use as system properties.
echo default none
echo(
echo /debug : run the service install in debug mode
echo(
echo Other commands:
echo(
echo service uninstall [/name ^<servicename^>]
echo service start [/name ^<servicename^>]
echo service stop [/name ^<servicename^>]
echo service restart [/name ^<servicename^>]
echo(
echo /name ^<servicename^> : Name of the service: should not contain spaces
echo default: %SHORTNAME%
echo(
goto endBatch
:cmdInstall
:LoopArgs
if "%~1" == "" goto doInstall
if /I "%~1"== "/debug" (
set ISDEBUG=true
shift
goto LoopArgs
)
if /I "%~1"== "/startup" (
set STARTUP_MODE=auto
shift
goto LoopArgs
)
if /I "%~1"== "/config" (
CALL :setRequiredValue CONFIG "%~2" "You need to specify a config name"
shift
shift
goto LoopArgs
)
if /I "%~1"== "/hostconfig" (
CALL :setRequiredValue HOSTCONFIG "%~2" "You need to specify a host-config name"
shift
shift
goto LoopArgs
)
if /I "%~1"== "/base" (
CALL :setRequiredValue BASE "%~2" "You need to specify a base directory name"
shift
shift
goto LoopArgs
)
if /I "%~1"== "/controller" (
CALL :setRequiredValue CONTROLLER "%~2" "The management interface should be specified in the format host:port, example: 127.0.0.1:9999"
shift
shift
goto LoopArgs
)
if /I "%~1"== "/name" (
CALL :setRequiredValue SHORTNAME "%~2" "You need to specify a service name"
shift
shift
goto LoopArgs
)
if /I "%~1"== "/display" (
CALL :setRequiredValue DISPLAYNAME "%~2" "You need to specify a service display name, maximum of 256 characters"
shift
shift
goto LoopArgs
)
if /I "%~1"== "/desc" (
CALL :setRequiredValue DESCRIPTION "%~2" "You need to specify a description, maximum of 1024 characters"
shift
shift
goto LoopArgs
)
if /I "%~1"== "/environment" (
CALL :setRequiredValue ENV_VARS "%~2" "You need to specify a list of environment variables"
shift
shift
goto LoopArgs
)
if /I "%~1"== "/jbossuser" (
CALL :setRequiredValue JBOSSUSER "%~2" "You need to specify a username"
shift
shift
goto LoopArgs
)
if /I "%~1"== "/jbosspass" (
CALL :setRequiredValue JBOSSPASS "%~2" "You need to specify a password for /jbosspass"
for %%C in (^^^^ ^^^( ^^^) ^^^> ^^^< ^^^& ^^^|) do (
if not "!JBOSSPASS:%%C=!"=="!JBOSSPASS!" set IS_SANITIZED=true
set "JBOSSPASS=!JBOSSPASS:%%C=^^%%C!"
)
if not "!IS_SANITIZED!" == "true" (
for %%C in (^^ ^( ^) ^> ^< ^& ^|) do (
set "JBOSSPASS=!JBOSSPASS:%%C=^^^%%C!"
)
)
shift
shift
goto LoopArgs
)
if /I "%~1"== "/serviceuser" (
CALL :setRequiredValue SERVICE_USER "%~2" "You need to specify a username in the format DOMAIN\USER, or .\USER for the local domain"
shift
shift
goto LoopArgs
)
if /I "%~1"== "/servicepass" (
CALL :setRequiredValue SERVICE_PASS "%~2" "You need to specify a password for /servicepass"
shift
shift
goto LoopArgs
)
rem the hostname is optional
if /I "%~1"== "/host" (
set IS_DOMAIN=true
if not "%~2"=="" (
set T=%~2
if not "!T:~0,1!"=="/" (
set DC_HOST=%~2
shift
)
)
shift
goto LoopArgs
)
if /I "%~1"== "/loglevel" (
if /I not "%~2"=="Error" if /I not "%~2"=="Info" if /I not "%~2"=="Warn" if /I not "%~2"=="Debug" (
echo ERROR: /loglevel must be set to Error, Info, Warn or Debug ^(Case insensitive^)
goto endBatch
)
set LOGLEVEL=%~2
shift
shift
goto LoopArgs
)
if /I "%~1"== "/logpath" (
CALL :setRequiredValue LOGPATH "%~2" "You need to specify a path for the service log"
shift
shift
goto LoopArgs
)
if /I "%~1"== "/properties" (
CALL :setRequiredValue PROPERTIES_PATH "%~2" "You need to specify the path to a properties file"
shift
shift
goto LoopArgs
)
echo ERROR: Unrecognised option: %1
echo(
goto cmdUsage
rem Set variable named by %1 to the value of %2 if it is valid, or echo error msg %3
:setRequiredValue
set "%~1="
if not "%~2"=="" (
set T=%~2
if not "!T:~0,1!"=="/" (
set "%~1=%~2"
)
)
if "!%~1!" == "" (
echo ERROR: %~3
goto endBatch
)
rem return to wherever we were called
EXIT /B 0
:doInstall
set CREDENTIALS=
if not "%JBOSSUSER%" == "" (
if "%JBOSSPASS%" == "" (
echo When specifying a user, you need to specify the password
goto endBatch
)
set "CREDENTIALS=--user=%JBOSSUSER% --password='!JBOSSPASS!'"
)
set "RUNAS=--ServiceUser=LocalSystem"
if not "%SERVICE_USER%" == "" (
if "%SERVICE_PASS%" == "" (
echo When specifying a user, you need to specify the password
goto endBatch
)
set RUNAS=--ServiceUser="%SERVICE_USER%" --ServicePassword="%SERVICE_PASS%"
)
if "%STDOUT%"=="" set STDOUT=auto
if "%STDERR%"=="" set STDERR=auto
if "%START_PATH%"=="" set START_PATH="%JBOSS_HOME%\bin"
if "%STOP_PATH%"=="" set STOP_PATH="%JBOSS_HOME%\bin"
if "%STOP_SCRIPT%"=="" set STOP_SCRIPT=jboss-cli.bat
if /I "%IS_DOMAIN%" == "true" (
if "%BASE%"=="" set "BASE=%JBOSS_HOME%\domain"
if "%CONFIG%"=="" set CONFIG=domain.xml
if "%START_SCRIPT%"=="" set START_SCRIPT=domain.bat
set STARTPARAM="/c#set#NOPAUSE=Y#&&#!START_SCRIPT!#-Djboss.domain.base.dir=!BASE!#--domain-config=!CONFIG!#--host-config=!HOSTCONFIG!"
set STOPPARAM="/c set NOPAUSE=Y && %STOP_SCRIPT% --controller=%CONTROLLER% --connect !CREDENTIALS! --command=/host=!DC_HOST!:shutdown"
) else (
if "%BASE%"=="" set "BASE=%JBOSS_HOME%\standalone"
if "%CONFIG%"=="" set CONFIG=standalone.xml
if "%START_SCRIPT%"=="" set START_SCRIPT=standalone.bat
if "%PROPERTIES_PATH%"=="" (
set "PROPS_PARAM="
) else (
set "PROPS_PARAM=#--properties=%PROPERTIES_PATH%"
)
set STARTPARAM="/c#set#NOPAUSE=Y#&&#!START_SCRIPT!#-Djboss.server.base.dir=!BASE!#--server-config=!CONFIG!!PROPS_PARAM!"
set STOPPARAM="/c set NOPAUSE=Y && !STOP_SCRIPT! --controller=%CONTROLLER% --connect !CREDENTIALS! --command=:shutdown"
)
if "%LOGPATH%"=="" set LOGPATH="!BASE!\log"
if not exist "%BASE%" (
echo The base directory does not exist: "%BASE%"
goto endBatch
)
if not exist "%BASE%\configuration\%CONFIG%" (
echo The configuration does not exist: "%BASE%\configuration\%CONFIG%"
goto endBatch
)
if /I "%ISDEBUG%" == "true" (
echo JBOSS_HOME="%JBOSS_HOME%"
echo RUNAS=!RUNAS!
echo SHORTNAME="%SHORTNAME%"
echo DISPLAYNAME="%DISPLAYNAME%"
echo DESCRIPTION="%DESCRIPTION%"
echo STARTPARAM=%STARTPARAM%
echo STOPPARAM=%STOPPARAM%
echo LOGLEVEL=%LOGLEVEL%
echo LOGPATH=%LOGPATH%
echo CREDENTIALS=%CREDENTIALS%
echo BASE="%BASE%"
echo CONFIG="%CONFIG%"
echo START_SCRIPT=%START_SCRIPT%
echo START_PATH=%START_PATH%
echo STOP_SCRIPT=%STOP_SCRIPT%
echo STOP_PATH=%STOP_PATH%
echo STDOUT="%STDOUT%"
echo STDERR="%STDERR%"
)
if /I "%ISDEBUG%" == "true" (
@echo on
)
@rem quotes around the "%DESCRIPTION%" and "%DISPLAYNAME" but nowhere else
echo %PRUNSRV% install %SHORTNAME% !RUNAS! --DisplayName="%DISPLAYNAME%" --Description="%DESCRIPTION%" ++Environment=%ENV_VARS% --LogLevel=%LOGLEVEL% --LogPath=%LOGPATH% --LogPrefix=service --StdOutput=%STDOUT% --StdError=%STDERR% --StartMode=exe --Startup=%STARTUP_MODE% --StartImage=cmd.exe --StartPath=%START_PATH% ++StartParams=%STARTPARAM% --StopMode=exe --StopImage=cmd.exe --StopPath=%STOP_PATH% ++StopParams=!STOPPARAM!
%PRUNSRV% install %SHORTNAME% !RUNAS! --DisplayName="%DISPLAYNAME%" --Description="%DESCRIPTION%" ++Environment=%ENV_VARS% --LogLevel=%LOGLEVEL% --LogPath=%LOGPATH% --LogPrefix=service --StdOutput=%STDOUT% --StdError=%STDERR% --StartMode=exe --Startup=%STARTUP_MODE% --StartImage=cmd.exe --StartPath=%START_PATH% ++StartParams=%STARTPARAM% --StopMode=exe --StopImage=cmd.exe --StopPath=%STOP_PATH% ++StopParams=!STOPPARAM!
@if /I "%ISDEBUG%" == "true" (
@echo off
)
if errorlevel 8 (
echo ERROR: The service %SHORTNAME% already exists
goto endBatch
)
if errorlevel 0 (
echo Service %SHORTNAME% installed
goto endBatch
)
goto cmdEnd
REM the other commands take a /name parameter - if there is no ^<servicename^> passed as second parameter,
REM we silently ignore this and use the default SHORTNAME
:cmdUninstall
if /I "%~1"=="/name" (
if not "%~2"=="" (
set SHORTNAME="%~2"
)
)
%PRUNSRV% stop %SHORTNAME%
if errorlevel 0 (
%PRUNSRV% delete %SHORTNAME%
if errorlevel 0 (
echo Service %SHORTNAME% uninstalled
)
) else (
echo Unable to stop the service %SHORTNAME%
)
goto cmdEnd
:cmdStart
if /I "%~1"=="/name" (
if not "%~2"=="" (
set SHORTNAME="%~2"
)
)
%PRUNSRV% start %SHORTNAME%
echo Service %SHORTNAME% starting...
goto cmdEnd
:cmdStop
if /I "%~1"=="/name" (
if not "%~2"=="" (
set SHORTNAME="%~2"
)
)
%PRUNSRV% stop %SHORTNAME%
echo Service %SHORTNAME% stopping...
goto cmdEnd
:cmdRestart
if /I "%~1"=="/name" (
if not "%~2"=="" (
set SHORTNAME="%~2"
)
)
%PRUNSRV% stop %SHORTNAME%
echo Service %SHORTNAME% stopping...
if "%errorlevel%" == "0" (
%PRUNSRV% start %SHORTNAME%
echo Service %SHORTNAME% starting...
) else (
echo Unable to stop the service %SHORTNAME%
)
goto cmdEnd
:cmdEnd
REM if there is a need to add other error messages, make sure to list higher numbers first !
if errorlevel 2 (
echo ERROR: Failed to load service %SHORTNAME% configuration
goto endBatch
)
if errorlevel 0 (
goto endBatch
)
echo "Unforseen error=%errorlevel%"
rem nothing below, exit
:endBatch