server.bat 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813
  1. @echo off
  2. @REM WebSphere Application Server liberty launch script
  3. @REM
  4. @REM Copyright IBM Corp. 2011, 2021
  5. @REM The source code for this program is not published or other-
  6. @REM wise divested of its trade secrets, irrespective of what has
  7. @REM been deposited with the U.S. Copyright Office.
  8. @REM
  9. @REM ----------------------------------------------------------------------------
  10. @REM
  11. @REM To customize the use of this script (for example with /etc/init.d system
  12. @REM service managers), use the following environment variables:
  13. @REM
  14. @REM JAVA_HOME - The java executable is found in %JAVA_HOME%\bin
  15. @REM
  16. @REM JVM_ARGS - A list of JVM command line options,
  17. @REM e.g. system properties or -X parameters
  18. @REM The value will be expanded by cmd.exe (use quotes for spaces)
  19. @REM
  20. @REM LOG_DIR - The log file directory
  21. @REM The default value is %WLP_OUTPUT_DIR%\serverName\logs
  22. @REM
  23. @REM LOG_FILE - The log file name
  24. @REM This log file is only used if the server is run in the
  25. @REM background via the start action.
  26. @REM The default value is console.log
  27. @REM
  28. @REM WLP_USER_DIR - The user/custom configuration directory used to store
  29. @REM shared and server-specific configuration.
  30. @REM See README.TXT for details about shared resource locations.
  31. @REM A server's configuration is at %WLP_USER_DIR%\servers\serverName
  32. @REM The default value is the usr directory in the install directory.
  33. @REM
  34. @REM WLP_OUTPUT_DIR - The directory containing output files for defined servers.
  35. @REM This directory must have both read and write permissions for
  36. @REM the user or users that start servers.
  37. @REM By default, a server's output logs and workarea are stored
  38. @REM in the %WLP_USER_DIR%\servers\serverName directory
  39. @REM (alongside configuration and applications).
  40. @REM If this variable is set, the output logs and workarea
  41. @REM would be stored in %WLP_OUTPUT_DIR%\serverName.
  42. @REM
  43. @REM WLP_DEBUG_ADDRESS - The port to use when running the server in debug mode.
  44. @REM The default value is 7777.
  45. @REM
  46. @REM WLP_DEBUG_SUSPEND - Whether to suspend the jvm on startup or not. This can be
  47. @REM set to y to suspend the jvm on startup until a debugger attaches,
  48. @REM or set to n to startup without waiting for a debugger to attach.
  49. @REM The default value is y.
  50. @REM
  51. @REM WLP_DEBUG_REMOTE - Whether to allow remote debugging or not. This can be set
  52. @REM to y to allow remote debugging. By default, this value is not
  53. @REM defined, which does not allow remote debugging on newer JDK/JREs.
  54. @REM
  55. @REM WINDOWS_SERVICE_START_TIMEOUT - Use when liberty is registered as a Windows
  56. @REM service. The value specifies the number of seconds the script
  57. @REM waits for the service to start before continuing. Default is 5.
  58. @REM
  59. @REM WINDOWS_SERVICE_STOP_TIMEOUT - Use when liberty is registered as a Windows
  60. @REM service. The value specifies the number of seconds the script
  61. @REM waits for the service to stop before continuing. Default is 5.
  62. @REM
  63. @REM ----------------------------------------------------------------------------
  64. setlocal enabledelayedexpansion
  65. @REM We set enabledelayedexpansion to allow !VAR!. Quoting rules:
  66. @REM - Use "%VAR%" (for passing to commands) or !VAR! (for echo) to expand
  67. @REM variables containing unknown content. %VAR% is substituted before
  68. @REM parsing, which causes problems if the value contains () or &, and it
  69. @REM causes the wrong value to be used if the variable is set within "if".
  70. @REM - Use set VAR=!VAR2!, not set VAR="!VAR2!", and use "%VAR%" when testing
  71. @REM or passing the variable. %0 and environment variables must be dequoted
  72. @REM specially to avoid issues with quotes or &. There is no reliable way to
  73. @REM handle & within %*, so users should not call the script with ^&.
  74. @REM - Use !VAR! not "%VAR%" to write to the console. Otherwise, the quotes
  75. @REM will be output literally.
  76. @REM If the user has explicitly set %errorlevel% set in their environment, then
  77. @REM it will lose its special properties. Reset it.
  78. set errorlevel=
  79. set CURRENT_DIR="%~dp0"
  80. set CURRENT_DIR=!CURRENT_DIR:"=!
  81. set WLP_INSTALL_DIR=!CURRENT_DIR:~0,-5!
  82. set INVOKED="%~0"
  83. set INVOKED=!INVOKED:"=!
  84. set PARAMS_QUOTED=%*
  85. @REM De-quote input environment variables.
  86. if defined JRE_HOME set JRE_HOME=!JRE_HOME:"=!
  87. if defined JAVA_HOME set JAVA_HOME=!JAVA_HOME:"=!
  88. if defined LOG_DIR set LOG_DIR=!LOG_DIR:"=!
  89. if defined LOG_FILE set LOG_FILE=!LOG_FILE:"=!
  90. if defined WLP_USER_DIR set WLP_USER_DIR=!WLP_USER_DIR:"=!
  91. if defined WLP_OUTPUT_DIR set WLP_OUTPUT_DIR=!WLP_OUTPUT_DIR:"=!
  92. if defined WLP_DEBUG_ADDRESS set WLP_DEBUG_ADDRESS=!WLP_DEBUG_ADDRESS:"=!
  93. if defined WINDOWS_SERVICE_START_TIMEOUT set WINDOWS_SERVICE_START_TIMEOUT=!WINDOWS_SERVICE_START_TIMEOUT:"=!
  94. if defined WINDOWS_SERVICE_STOP_TIMEOUT set WINDOWS_SERVICE_STOP_TIMEOUT=!WINDOWS_SERVICE_STOP_TIMEOUT:"=!
  95. if NOT defined WINDOWS_SERVICE_START_TIMEOUT set WINDOWS_SERVICE_START_TIMEOUT=5
  96. if NOT defined WINDOWS_SERVICE_STOP_TIMEOUT set WINDOWS_SERVICE_STOP_TIMEOUT=5
  97. @REM Consume script parameters
  98. @REM Set the action - must be present
  99. set ACTION=%~1
  100. if "%ACTION%" == "" set ACTION=help:usage
  101. @REM Set the server name - optional
  102. set SERVER_ARG=%2
  103. set SERVER_NAME=%~2
  104. if not defined SERVER_ARG (
  105. set SERVER_NAME=defaultServer
  106. ) else if "%SERVER_NAME%" == "" (
  107. set SERVER_NAME=defaultServer
  108. ) else if "%SERVER_NAME:~0,2%" == "--" (
  109. set SERVER_NAME=defaultServer
  110. )
  111. @REM Set JAVA_PARAMS_QUOTED.
  112. set JAVA_AGENT_QUOTED="-javaagent:!WLP_INSTALL_DIR!\bin\tools\ws-javaagent.jar"
  113. if defined WLP_SKIP_BOOTSTRAP_AGENT set JAVA_AGENT_QUOTED=
  114. set JAVA_PARAMS_QUOTED=!JVM_ARGS! -jar "%WLP_INSTALL_DIR%\bin\tools\ws-server.jar"
  115. set RC=255
  116. @REM process the selected option...
  117. if "help" == "%ACTION%" (
  118. call:help
  119. ) else if "help:usage" == "%ACTION%" (
  120. call:usage
  121. ) else if "version" == "%ACTION%" (
  122. call:version
  123. ) else if "list" == "%ACTION%" (
  124. call:list
  125. ) else if "create" == "%ACTION%" (
  126. call:createServer
  127. ) else if "run" == "%ACTION%" (
  128. call:runServer
  129. ) else if "debug" == "%ACTION%" (
  130. call:debugServer
  131. ) else if "status" == "%ACTION%" (
  132. call:serverStatus
  133. ) else if "status:fast" == "%ACTION%" (
  134. call:serverStatusFast
  135. ) else if "start" == "%ACTION%" (
  136. call:startServer
  137. ) else if "package" == "%ACTION%" (
  138. call:package
  139. ) else if "stop" == "%ACTION%" (
  140. call:stopServer
  141. ) else if "dump" == "%ACTION%" (
  142. call:dump
  143. ) else if "javadump" == "%ACTION%" (
  144. call:javadump
  145. ) else if "registerWinService" == "%ACTION%" (
  146. call:registerWinService
  147. ) else if "startWinService" == "%ACTION%" (
  148. call:startWinService
  149. ) else if "stopWinService" == "%ACTION%" (
  150. call:stopWinService
  151. ) else if "unregisterWinService" == "%ACTION%" (
  152. call:unregisterWinService
  153. ) else if "pause" == "%ACTION%" (
  154. call:pauseServer
  155. ) else if "resume" == "%ACTION%" (
  156. call:resumeServer
  157. ) else (
  158. goto:actions
  159. )
  160. @REM
  161. @REM THE END.
  162. @REM -- we're really done now.
  163. @REM EXIT /B will return to where we before calling SETLOCAL.
  164. @REM EXIT will quit the CMD shell entirely.
  165. @REM EXIT_ALL is required on Windows XP because it loses the errorlevel when
  166. @REM using exit /b when this script is invoked from Java. %COMSPEC% /c exit
  167. @REM works but loses errorlevel when invoked from Cygwin.
  168. @REM
  169. if not defined EXIT_ALL set EXIT_ALL=0
  170. if %EXIT_ALL% == 1 (
  171. EXIT %RC%
  172. ) else (
  173. EXIT /B %RC%
  174. )
  175. ENDLOCAL
  176. :usage
  177. call:installEnv
  178. !JAVA_CMD_QUOTED! !JAVA_PARAMS_QUOTED! --help:usage
  179. set RC=%errorlevel%
  180. call:javaCmdResult
  181. goto:eof
  182. :actions
  183. call:installEnv
  184. !JAVA_CMD_QUOTED! !JAVA_PARAMS_QUOTED! --help:actions:%ACTION%
  185. set RC=%errorlevel%
  186. call:javaCmdResult
  187. goto:eof
  188. :help
  189. call:installEnv
  190. !JAVA_CMD_QUOTED! !JAVA_PARAMS_QUOTED! --help %SERVER_NAME%
  191. set RC=%errorlevel%
  192. call:javaCmdResult
  193. goto:eof
  194. :version
  195. call:installEnv
  196. !JAVA_CMD_QUOTED! !JAVA_PARAMS_QUOTED! --version
  197. set RC=%errorlevel%
  198. call:javaCmdResult
  199. goto:eof
  200. :list
  201. call:installEnv
  202. !JAVA_CMD_QUOTED! !JAVA_PARAMS_QUOTED! --list
  203. set RC=%errorlevel%
  204. call:javaCmdResult
  205. goto:eof
  206. :serverStatus
  207. call:serverEnv
  208. call:serverExists true
  209. if %RC% == 2 goto:eof
  210. !JAVA_CMD_QUOTED! !JAVA_PARAMS_QUOTED! "%SERVER_NAME%" --status
  211. set RC=%errorlevel%
  212. call:javaCmdResult
  213. goto:eof
  214. :serverStatusFast
  215. call:serverEnv
  216. call:serverExists
  217. if %RC% == 2 goto:eof
  218. call:serverRunning
  219. goto:eof
  220. :createServer
  221. call:installEnv
  222. !JAVA_CMD_QUOTED! !JAVA_PARAMS_QUOTED! --batch-file=--create !PARAMS_QUOTED!
  223. set RC=%errorlevel%
  224. call:javaCmdResult
  225. goto:eof
  226. :debugServer
  227. call:serverEnvAndJVMOptions
  228. if not %RC% == 0 goto:eof
  229. if not defined WLP_DEBUG_ADDRESS set WLP_DEBUG_ADDRESS=7777
  230. if not defined WLP_DEBUG_SUSPEND set WLP_DEBUG_SUSPEND=y
  231. if /I "%WLP_DEBUG_REMOTE%" == "Y" set WLP_DEBUG_REMOTE_HOST="0.0.0.0:"
  232. if not defined WLP_DEBUG_REMOTE_HOST set WLP_DEBUG_REMOTE_HOST=
  233. set JAVA_PARAMS_QUOTED=-Dwas.debug.mode=true -Dsun.reflect.noInflation=true -agentlib:jdwp=transport=dt_socket,server=y,suspend="!WLP_DEBUG_SUSPEND!",address="!WLP_DEBUG_REMOTE_HOST!!WLP_DEBUG_ADDRESS!" !JAVA_PARAMS_QUOTED!
  234. call:serverExists true
  235. if %RC% == 2 goto:eof
  236. call:serverWorkingDirectory
  237. set SAVE_IBM_JAVA_OPTIONS=!IBM_JAVA_OPTIONS!
  238. set SAVE_OPENJ9_JAVA_OPTIONS=!OPENJ9_JAVA_OPTIONS!
  239. set IBM_JAVA_OPTIONS=!SERVER_IBM_JAVA_OPTIONS!
  240. set OPENJ9_JAVA_OPTIONS=!SERVER_IBM_JAVA_OPTIONS!
  241. !JAVA_CMD_QUOTED! !JAVA_AGENT_QUOTED! !JVM_OPTIONS! !JAVA_PARAMS_QUOTED! --batch-file !PARAMS_QUOTED!
  242. set RC=%errorlevel%
  243. set IBM_JAVA_OPTIONS=!SAVE_IBM_JAVA_OPTIONS!
  244. set OPENJ9_JAVA_OPTIONS=!SAVE_OPENJ9_JAVA_OPTIONS!
  245. call:javaCmdResult
  246. goto:eof
  247. :runServer
  248. call:serverEnvAndJVMOptions
  249. if not %RC% == 0 goto:eof
  250. call:serverExists true
  251. if %RC% == 2 goto:eof
  252. call:serverWorkingDirectory
  253. set SAVE_IBM_JAVA_OPTIONS=!IBM_JAVA_OPTIONS!
  254. set IBM_JAVA_OPTIONS=!SERVER_IBM_JAVA_OPTIONS!
  255. set SAVE_OPENJ9_JAVA_OPTIONS=!OPENJ9_JAVA_OPTIONS!
  256. set OPENJ9_JAVA_OPTIONS=!SERVER_IBM_JAVA_OPTIONS!
  257. !JAVA_CMD_QUOTED! !JAVA_AGENT_QUOTED! !JVM_OPTIONS! !JAVA_PARAMS_QUOTED! --batch-file !PARAMS_QUOTED!
  258. set RC=%errorlevel%
  259. set IBM_JAVA_OPTIONS=!SAVE_IBM_JAVA_OPTIONS!
  260. set OPENJ9_JAVA_OPTIONS=!SAVE_OPENJ9_JAVA_OPTIONS!
  261. call:javaCmdResult
  262. goto:eof
  263. :startServer
  264. call:serverEnvAndJVMOptions
  265. if not %RC% == 0 goto:eof
  266. call:serverExists true
  267. if %RC% == 2 goto:eof
  268. call:serverRunning
  269. if %RC% == 0 (
  270. !JAVA_CMD_QUOTED! !JAVA_PARAMS_QUOTED! --message:info.serverIsAlreadyRunning "%SERVER_NAME%"
  271. set RC=!errorlevel!
  272. if !RC! == 0 (
  273. set RC=1
  274. ) else (
  275. call:javaCmdResult
  276. )
  277. ) else (
  278. call:serverWorkingDirectory
  279. if not exist "%SERVER_OUTPUT_DIR%\workarea" mkdir "%SERVER_OUTPUT_DIR%\workarea"
  280. type nul > "%SERVER_OUTPUT_DIR%\workarea\.sLock"
  281. del "%SERVER_OUTPUT_DIR%\workarea\.sCommand" 2> nul
  282. if not exist "%X_LOG_DIR%" mkdir "%X_LOG_DIR%"
  283. @REM Ensure we can write to console.log. If we can't, then the background
  284. @REM process will fail. The type command doesn't set errorlevel by itself,
  285. @REM so use ||.
  286. (type nul > "%X_LOG_DIR%\%X_LOG_FILE%") 2> nul || rem
  287. if not !errorlevel! == 0 (
  288. !JAVA_CMD_QUOTED! !JAVA_PARAMS_QUOTED! --message:error.fileNotFound "%X_LOG_DIR%\%X_LOG_FILE%"
  289. set RC=!errorlevel!
  290. call:javaCmdResult
  291. goto:eof
  292. )
  293. set X_CMD=!JAVA_CMD_QUOTED! !JAVA_AGENT_QUOTED! !JVM_OPTIONS! !JAVA_PARAMS_QUOTED! --batch-file !PARAMS_QUOTED!
  294. set SAVE_IBM_JAVA_OPTIONS=!IBM_JAVA_OPTIONS!
  295. set IBM_JAVA_OPTIONS=!SERVER_IBM_JAVA_OPTIONS!
  296. set SAVE_OPENJ9_JAVA_OPTIONS=!OPENJ9_JAVA_OPTIONS!
  297. set OPENJ9_JAVA_OPTIONS=!SERVER_IBM_JAVA_OPTIONS!
  298. @REM Use javaw so command windows can be closed.
  299. start /min /b "" !JAVA_CMD_QUOTED!w !JAVA_AGENT_QUOTED! !JVM_OPTIONS! !JAVA_PARAMS_QUOTED! --batch-file !PARAMS_QUOTED! >> "%X_LOG_DIR%\%X_LOG_FILE%" 2>&1
  300. set IBM_JAVA_OPTIONS=!SAVE_IBM_JAVA_OPTIONS!
  301. set OPENJ9_JAVA_OPTIONS=!SAVE_OPENJ9_JAVA_OPTIONS!
  302. !JAVA_CMD_QUOTED! !JAVA_PARAMS_QUOTED! "!SERVER_NAME!" --status:start
  303. set RC=!errorlevel!
  304. call:javaCmdResult
  305. )
  306. goto:eof
  307. :stopServer
  308. call:serverEnv
  309. call:serverExists true
  310. if %RC% == 2 goto:eof
  311. !JAVA_CMD_QUOTED! !JAVA_PARAMS_QUOTED! --batch-file=--stop !PARAMS_QUOTED!
  312. set RC=%errorlevel%
  313. call:javaCmdResult
  314. goto:eof
  315. :package
  316. call:serverEnvAndJVMOptions
  317. if not %RC% == 0 goto:eof
  318. call:serverExists true
  319. if %RC% == 2 goto:eof
  320. !JAVA_CMD_QUOTED! !JVM_OPTIONS! !JAVA_PARAMS_QUOTED! --batch-file=--package !PARAMS_QUOTED!
  321. set RC=%errorlevel%
  322. call:javaCmdResult
  323. goto:eof
  324. :dump
  325. call:serverEnv
  326. call:serverExists true
  327. if %RC% == 2 goto:eof
  328. !JAVA_CMD_QUOTED! !JAVA_PARAMS_QUOTED! --batch-file=--dump !PARAMS_QUOTED!
  329. set RC=%errorlevel%
  330. call:javaCmdResult
  331. goto:eof
  332. :javadump
  333. call:serverEnv
  334. call:serverExists true
  335. if %RC% == 2 goto:eof
  336. !JAVA_CMD_QUOTED! !JAVA_PARAMS_QUOTED! --batch-file=--javadump !PARAMS_QUOTED!
  337. set RC=%errorlevel%
  338. call:javaCmdResult
  339. goto:eof
  340. :registerWinService
  341. if NOT "%OS%" == "Windows_NT" goto:eof
  342. call:serverEnv
  343. call:serverExists true
  344. if %RC% == 2 goto:eof
  345. "!WLP_INSTALL_DIR!\bin\tools\win\prunsrv.exe" //IS//%SERVER_NAME% --Startup=manual --DisplayName="%SERVER_NAME%" --Description="IBM WebSphere Liberty Profile" ++DependsOn=Tcpip --LogPath="!WLP_OUTPUT_DIR!\%SERVER_NAME%\logs" --StdOutput=auto --StdError=auto --StartMode=exe --StartPath="%WLP_INSTALL_DIR%" --StartImage="%WLP_INSTALL_DIR%\bin\server.bat" ++StartParams=start#%SERVER_NAME% --StopMode=exe --StopPath="%WLP_INSTALL_DIR%" --StopImage="%WLP_INSTALL_DIR%\bin\server.bat" ++StopParams=stop#%SERVER_NAME% --ServiceUser=LocalSystem
  346. set RC=!errorlevel!
  347. goto:eof
  348. :startWinService
  349. if NOT "%OS%" == "Windows_NT" goto:eof
  350. call:serverEnvAndJVMOptions
  351. if not %RC% == 0 goto:eof
  352. call:serverExists true
  353. if %RC% == 2 goto:eof
  354. call:serverRunning
  355. if %RC% == 0 (
  356. !JAVA_CMD_QUOTED! !JAVA_PARAMS_QUOTED! --message:info.serverIsAlreadyRunning "%SERVER_NAME%"
  357. set RC=!errorlevel!
  358. if !RC! == 0 (
  359. set RC=1
  360. ) else (
  361. call:javaCmdResult
  362. )
  363. ) else (
  364. "!WLP_INSTALL_DIR!\bin\tools\win\prunsrv.exe" //ES//%SERVER_NAME%
  365. set RC=!errorlevel!
  366. @rem Wait up to WINDOWS_SERVICE_START_TIMEOUT seconds for server status to be "running"
  367. call:serverRunning !WINDOWS_SERVICE_START_TIMEOUT! 0
  368. call:javaCmdResult
  369. )
  370. goto:eof
  371. :stopWinService
  372. if NOT "%OS%" == "Windows_NT" goto:eof
  373. call:serverEnv
  374. call:serverExists true
  375. if %RC% == 2 goto:eof
  376. "!WLP_INSTALL_DIR!\bin\tools\win\prunsrv.exe" //SS//%SERVER_NAME%
  377. set RC=!errorlevel!
  378. @rem Wait up to WINDOWS_SERVICE_START_TIMEOUT seconds for server status to be 1, meaning stopped.
  379. @rem RC=0 indicates the server is running; ie the stop request failed.
  380. @rem Call stopServer directly. Stopping the server should stop the service.
  381. @rem RC=1 is what we are expecting, meaning server stopped.
  382. @rem Change RC to RC=0 to indicate success.
  383. call:serverRunning !WINDOWS_SERVICE_STOP_TIMEOUT! 1
  384. if !RC! EQU 0 (
  385. @rem The service failed to stop, attempt to stop the server directly.
  386. call:stopServer
  387. ) else (
  388. set RC=0
  389. )
  390. goto:eof
  391. :unregisterWinService
  392. if NOT "%OS%" == "Windows_NT" goto:eof
  393. "!WLP_INSTALL_DIR!\bin\tools\win\prunsrv.exe" //DS//%SERVER_NAME%
  394. set RC=!errorlevel!
  395. goto:eof
  396. :pauseServer
  397. call:serverEnv
  398. call:serverExists true
  399. if %RC% == 2 goto:eof
  400. !JAVA_CMD_QUOTED! !JAVA_PARAMS_QUOTED! --batch-file=--pause !PARAMS_QUOTED!
  401. set RC=%errorlevel%
  402. call:javaCmdResult
  403. goto:eof
  404. :resumeServer
  405. call:serverEnv
  406. call:serverExists true
  407. if %RC% == 2 goto:eof
  408. !JAVA_CMD_QUOTED! !JAVA_PARAMS_QUOTED! --batch-file=--resume !PARAMS_QUOTED!
  409. set RC=%errorlevel%
  410. call:javaCmdResult
  411. goto:eof
  412. @REM
  413. @REM Utility functions
  414. @REM
  415. @REM
  416. @REM Set environment variables for a non-server or nonexistent server command.
  417. @REM
  418. :installEnv
  419. call:readServerEnv "%WLP_INSTALL_DIR%\etc\server.env"
  420. call:installEnvDefaults
  421. call:serverEnvDefaults
  422. goto:eof
  423. @REM
  424. @REM Set variable defaults for a non-server or nonexistent server command.
  425. @REM
  426. :installEnvDefaults
  427. call:readServerEnv "%WLP_INSTALL_DIR%\java\java.env"
  428. call:readServerEnv "%WLP_INSTALL_DIR%\etc\default.env"
  429. if not defined WLP_DEFAULT_USER_DIR set WLP_DEFAULT_USER_DIR=!WLP_INSTALL_DIR!\usr
  430. if not defined WLP_USER_DIR set WLP_USER_DIR=!WLP_DEFAULT_USER_DIR!
  431. if not defined WLP_DEFAULT_OUTPUT_DIR set WLP_DEFAULT_OUTPUT_DIR=!WLP_USER_DIR!\servers
  432. if not defined WLP_OUTPUT_DIR set WLP_OUTPUT_DIR=!WLP_DEFAULT_OUTPUT_DIR!
  433. set SERVER_CONFIG_DIR=!WLP_USER_DIR!\servers\!SERVER_NAME!
  434. goto:eof
  435. @REM
  436. @REM Set defaults for server variables.
  437. @REM
  438. :serverEnvDefaults
  439. set SERVER_OUTPUT_DIR=!WLP_OUTPUT_DIR!\!SERVER_NAME!
  440. if not defined LOG_DIR (
  441. set X_LOG_DIR=!SERVER_OUTPUT_DIR!\logs
  442. ) else (
  443. set X_LOG_DIR=!LOG_DIR!
  444. )
  445. if not defined LOG_FILE (
  446. set X_LOG_FILE=console.log
  447. ) else (
  448. set X_LOG_FILE=!LOG_FILE!
  449. )
  450. @REM Unset these variables to prevent collisions with nested process invocations
  451. set LOG_DIR=
  452. set LOG_FILE=
  453. if NOT defined JAVA_HOME (
  454. if NOT defined JRE_HOME (
  455. if NOT defined WLP_DEFAULT_JAVA_HOME (
  456. @REM Use whatever java is on the path
  457. set JAVA_CMD_QUOTED="java"
  458. ) else (
  459. if "!WLP_DEFAULT_JAVA_HOME:~0,17!" == "@WLP_INSTALL_DIR@" (
  460. set WLP_DEFAULT_JAVA_HOME=!WLP_INSTALL_DIR!!WLP_DEFAULT_JAVA_HOME:~17!
  461. )
  462. set JAVA_CMD_QUOTED="!WLP_DEFAULT_JAVA_HOME!\bin\java"
  463. )
  464. ) else (
  465. set JAVA_CMD_QUOTED="%JRE_HOME%\bin\java"
  466. )
  467. ) else (
  468. if exist "%JAVA_HOME%\jre\bin\java.exe" set JAVA_HOME=!JAVA_HOME!\jre
  469. set JAVA_CMD_QUOTED="!JAVA_HOME!\bin\java"
  470. )
  471. @REM Use OPENJ9_JAVA_OPTIONS if defined, otherwise use IBM_JAVA_OPTIONS
  472. if NOT defined OPENJ9_JAVA_OPTIONS (
  473. set SPECIFIED_JAVA_OPTIONS=!IBM_JAVA_OPTIONS!
  474. ) else (
  475. set SPECIFIED_JAVA_OPTIONS=!OPENJ9_JAVA_OPTIONS!
  476. )
  477. @REM Command-line parsing of -Xshareclasses does not allow "," in cacheDir.
  478. if "!WLP_OUTPUT_DIR:,=!" == "!WLP_OUTPUT_DIR!" (
  479. @REM Check if Xshareclasses is already defined in IBM_JAVA_OPTIONS/OPENJ9_JAVA_OPTIONS
  480. @REM First check if SPECIFIED_JAVA_OPTIONS is undefined as the second test does not work with undefined variables
  481. if NOT defined SPECIFIED_JAVA_OPTIONS (
  482. set ADD_SHARE_CLASSES=true
  483. ) else if "!SPECIFIED_JAVA_OPTIONS:Xshareclasses=!" == "!SPECIFIED_JAVA_OPTIONS!" (
  484. set ADD_SHARE_CLASSES=true
  485. ) else (
  486. @REM Xshareclasses IS found in IBM_JAVA_OPTIONS/OPENJ9_JAVA_OPTIONS, skip adding it to SERVER_IBM_JAVA_OPTIONS below
  487. set ADD_SHARE_CLASSES=false
  488. )
  489. if "!ADD_SHARE_CLASSES!" == "true" (
  490. @REM Set -Xscmx
  491. if "debug" == "%ACTION%" (
  492. set XSCMX_VAL="130m"
  493. ) else (
  494. set XSCMX_VAL="80m"
  495. )
  496. set SERVER_IBM_JAVA_OPTIONS=-Xshareclasses:name=liberty-%%u,nonfatal,cacheDir="%WLP_OUTPUT_DIR%\.classCache" -XX:ShareClassesEnableBCI -Xscmx!XSCMX_VAL! !SPECIFIED_JAVA_OPTIONS!
  497. ) else (
  498. set SERVER_IBM_JAVA_OPTIONS=!SPECIFIED_JAVA_OPTIONS!
  499. )
  500. ) else (
  501. set SERVER_IBM_JAVA_OPTIONS=!SPECIFIED_JAVA_OPTIONS!
  502. )
  503. @REM Add -Xquickstart -Xshareclasses:none for client JVMs only. We don't want
  504. @REM shared classes cache created for client operations.
  505. set IBM_JAVA_OPTIONS=-Xquickstart !IBM_JAVA_OPTIONS! -Xshareclasses:none
  506. set OPENJ9_JAVA_OPTIONS=-Xquickstart !OPENJ9_JAVA_OPTIONS! -Xshareclasses:none
  507. goto:eof
  508. @REM
  509. @REM Set environment variables for an existing server.
  510. @REM
  511. :serverEnv
  512. call:readServerEnv "%WLP_INSTALL_DIR%\etc\server.env"
  513. call:installEnvDefaults
  514. call:readServerEnv "%WLP_USER_DIR%/shared/server.env"
  515. call:readServerEnv "%SERVER_CONFIG_DIR%\server.env"
  516. call:serverEnvDefaults
  517. goto:eof
  518. @REM
  519. @REM Set environment variables and JVM_OPTIONS for an existing server.
  520. @REM
  521. :serverEnvAndJVMOptions
  522. call:serverEnv
  523. set JVM_OPTIONS=
  524. @REM Avoid HeadlessException.
  525. set JVM_OPTIONS=-Djava.awt.headless=true !JVM_OPTIONS!
  526. @REM allow late self attach for when the localConnector-1.0 feature is enabled
  527. set JVM_OPTIONS=-Djdk.attach.allowAttachSelf=true !JVM_OPTIONS!
  528. @REM Clean out jvm_temp_options from a prior script execution
  529. set JVM_TEMP_OPTIONS=
  530. @REM The order of merging the jvm.option files sets the precedence.
  531. @REM Once a given jvm option is set, it will be overridden if a duplicate
  532. @REM is seen later. They will both be written in to the options parameter
  533. @REM but the last one written will take precedence. If none are read
  534. @REM the script will try to read etc
  535. set RC=0
  536. call:mergeJVMOptions "%WLP_USER_DIR%\shared\jvm.options"
  537. if not %RC% == 0 goto:eof
  538. @REM This location is intentionally not documented but removing might break existing installations
  539. call:mergeJVMOptions "%WLP_INSTALL_DIR%\usr\shared\jvm.options"
  540. if not %RC% == 0 goto:eof
  541. call:mergeJVMOptions "%SERVER_CONFIG_DIR%\configDropins\defaults\jvm.options"
  542. if not %RC% == 0 goto:eof
  543. call:mergeJVMOptions "%SERVER_CONFIG_DIR%\jvm.options"
  544. if not %RC% == 0 goto:eof
  545. call:mergeJVMOptions "%SERVER_CONFIG_DIR%\configDropins\overrides\jvm.options"
  546. if not %RC% == 0 goto:eof
  547. @REM If none of the four files above are seen we will check for an options
  548. @REM file in the etc folder.
  549. if not defined USE_ETC_OPTIONS (
  550. set JVM_TEMP_OPTIONS=
  551. call:mergeJVMOptions "%WLP_INSTALL_DIR%\etc\jvm.options"
  552. )
  553. @REM If we are running on Java 9, apply Liberty's built-in java 9 options
  554. if exist "%JAVA_HOME%\lib\modules" (
  555. call:mergeJVMOptions "%WLP_INSTALL_DIR%\lib\platform\java\java9.options"
  556. )
  557. @REM Filter off all of the -D and -X arguments off of !PARAMS_QUOTED! and
  558. @REM add them onto !JVM_OPTIONS!
  559. set INCLUDE_NEXT_ARG=F
  560. for %%a in (%PARAMS_QUOTED%) do (
  561. set CUR_ARG=%%a
  562. if "!INCLUDE_NEXT_ARG!"=="T" (
  563. set JVM_TEMP_OPTIONS=!JVM_TEMP_OPTIONS!=!CUR_ARG!
  564. set INCLUDE_NEXT_ARG=F
  565. ) else if "!CUR_ARG:~0,2!"=="-D" (
  566. @REM key=value arguments get parsed as two separate tokens, so when we see
  567. @REM a -Dkey=value option we need to set a flag to include the next arg
  568. set JVM_TEMP_OPTIONS=!JVM_TEMP_OPTIONS! !CUR_ARG!
  569. set INCLUDE_NEXT_ARG=T
  570. ) else if "!CUR_ARG:~0,2!"=="-X" (
  571. set JVM_TEMP_OPTIONS=!JVM_TEMP_OPTIONS! !CUR_ARG!
  572. )
  573. )
  574. set JVM_OPTIONS=!JVM_OPTIONS!%JVM_TEMP_OPTIONS%
  575. goto:eof
  576. @REM
  577. @REM Merging one jvm option into the options string
  578. @REM
  579. :mergeJVMOptions
  580. set jvmoptionfile=%1
  581. if exist %jvmoptionfile% (
  582. set USE_ETC_OPTIONS=defined
  583. call:readJVMOptions %jvmoptionfile%
  584. )
  585. goto:eof
  586. @REM
  587. @REM Read and set variables from the quoted file %1. Empty lines and lines
  588. @REM beginning with the hash character ('#') are ignored. All other lines must
  589. @REM be be of the form: VAR=VALUE
  590. @REM
  591. :readServerEnv
  592. if not exist %1 goto:eof
  593. for /f "usebackq eol=# delims== tokens=1,*" %%i in (%1) do set %%i=%%j
  594. goto:eof
  595. @REM
  596. @REM Read the contents of the quoted file %1 and append the contents to
  597. @REM %JVM_OPTIONS%. Empty lines and lines beginning with the hash character
  598. @REM ('#') are ignored. All other lines are concatenated.
  599. @REM
  600. :readJVMOptions
  601. @REM delims= is not specified, so leading whitespace is not preserved. This
  602. @REM is contrary to the documentation, but we keep the current behavior for
  603. @REM backwards compatibility since it causes no other known issues.
  604. for /f "usebackq eol=# tokens=*" %%i in (%1) do (
  605. set JVM_OPTION="%%i"
  606. set JVM_OPTION=!JVM_OPTION:"=!
  607. set JVM_TEMP_OPTIONS=!JVM_TEMP_OPTIONS! "%%i"
  608. )
  609. goto:eof
  610. @REM
  611. @REM Set the current working directory for an existing server.
  612. @REM
  613. :serverWorkingDirectory
  614. if not exist "%SERVER_OUTPUT_DIR%" mkdir "%SERVER_OUTPUT_DIR%"
  615. cd /d "%SERVER_OUTPUT_DIR%"
  616. goto:eof
  617. @REM
  618. @REM Check the result of a Java command.
  619. @REM
  620. :javaCmdResult
  621. if %RC% == 0 goto:eof
  622. if !JAVA_CMD_QUOTED! == "java" (
  623. @REM The command does not contain "\", so errorlevel 9009 will be reported
  624. @REM if the command does not exist.
  625. if %RC% neq 9009 goto:eof
  626. ) else (
  627. @REM The command contains "\", so errorlevel 3 will be reported. We can't
  628. @REM distinguish that from our own exit codes, so check for the existence
  629. @REM of java.exe.
  630. if exist !JAVA_CMD_QUOTED!.exe goto:eof
  631. )
  632. @REM Windows prints a generic "The system cannot find the path specified.",
  633. @REM so echo the java command.
  634. echo !JAVA_CMD_QUOTED!
  635. goto:eof
  636. @REM
  637. @REM serverRunning: Return 0 if the server is running (.sLock file is in use),
  638. @REM 1 if not (file is not in use),
  639. @REM Parmeters %1 - optional. Time (in seconds) to wait for a particular status.
  640. @REM default: 0
  641. @REM %2 - optional. (0 or 1). Status to wait for.
  642. @REM 0: wait for server to be running
  643. @REM 1: wait for server to be stopped
  644. @REM default: 0
  645. @REM
  646. :serverRunning
  647. @REM set defaults
  648. set serverRunningCounter=0
  649. set serverRunningTimeOut=0
  650. set serverRunningDesiredStatus=0
  651. set SERVER_LOCK_FILE=!SERVER_OUTPUT_DIR!\workarea\.sLock
  652. @REM Read parameters if any
  653. if NOT "%~1" == "" set serverRunningTimeOut=%~1
  654. if NOT "%~2" == "" set serverRunningDesiredStatus=%~2
  655. @REM DO WHILE not timed out and desired status not achieved.
  656. :repeatServerRunning
  657. @REM Check server status
  658. if NOT EXIST "%SERVER_LOCK_FILE%" (
  659. set RC=1
  660. ) else (
  661. @REM If the server has locked .sLock, then the redirection will fail. The
  662. @REM type command doesn't set errorlevel by itself, so use ||.
  663. (type nul > "%SERVER_LOCK_FILE%") 2> nul || rem
  664. if !errorlevel! == 0 (
  665. set RC=1
  666. ) else (
  667. set RC=0
  668. )
  669. )
  670. @REM If no timeout is set, just return. Not waiting for any particular status.
  671. if !serverRunningTimeOut! EQU 0 goto:eof
  672. @REM Got desired status? Get out of here.
  673. if !RC! EQU !serverRunningDesiredStatus! goto:eof
  674. @REM If timed out, get out of here.
  675. if !serverRunningCounter! GEQ !serverRunningTimeOut! goto:eof
  676. @REM Delay 1 second and repeat loop
  677. timeout /t 1 > nul
  678. set /A serverRunningCounter = !serverRunningCounter! + 1
  679. goto :repeatServerRunning
  680. @REM END WHILE
  681. goto:eof
  682. @REM
  683. @REM serverExists: Return 0 if %SERVER_CONFIG_DIR% exists, or is "defaultServer"
  684. @REM 2 if server does not exist
  685. @REM
  686. :serverExists
  687. if "%SERVER_NAME%" == "defaultServer" (
  688. set RC=0
  689. ) else if NOT EXIST "%SERVER_CONFIG_DIR%" (
  690. if "%1" == "true" (
  691. !JAVA_CMD_QUOTED! !JAVA_PARAMS_QUOTED! --message:info.serverNotExist "%SERVER_NAME%"
  692. set RC=!errorlevel!
  693. if !RC! == 0 (
  694. set RC=2
  695. ) else (
  696. call:javaCmdResult
  697. )
  698. ) else (
  699. set RC=2
  700. )
  701. ) else (
  702. set RC=0
  703. )
  704. goto:eof