在windows生可以使用脚本利用Tomcat的shutdown.bat和startup.bat脚本来重启Tomcat。但是有时候会一不小心关闭startup.bat窗口而引起的麻烦,说实话windows环境上部署服务器运行效率有点低。
先附上使用Tomcat自带脚本启动的bat脚本:
@echo off
::cd /d "D:\java\Tomcat9\bin"
cd /d "D:\java\Tomcat9\bin"
title Tomcat重新启动脚本
call "shutdown.bat"
ping -n 6 127.1 >nul
wmic process where name="java.exe" get processid,commandline |findstr /i "tomcat" >#
setlocal enabledelayedexpansion
for /f "delims=*" %%i in (#) do (
set var=%%i
set var=!var:start =#!
for /f "tokens=2 delims=#" %%a in ("!var!") do (
set tomcatpid=%%a
)
)
del # >nul
if defined tomcatpid taskkill /pid !tomcatpid!
ping -n 3 127.1 >nul
call "startup.bat"
exit
解决方法:
将tomcat注册为windows上服务,这样就可以通过cmd窗口启动tomcat服务器,当关闭窗口时服务也会一直运行
前置条件:
Tomcat在windows上能正常运行。然后才可以进行以下步骤:
管理员运行cmd窗口。然后进入到Tomcat安装目录下的bin目录中,输入net start tomcat9或net start tomcat就可以运行tomcat服务了,窗口这回关闭了,tomcat服务器一会一直运行
停止tomcat服务输入net stop tomcat9命令
接下来就是写重启Tomcat的bat脚本了:
@echo off
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' NEQ '0' (goto UACPrompt) else ( goto gotAdmin )
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /B
:gotAdmin
if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
pushd "%CD%"
CD /D "%~dp0"
::cd /d "D:\java\Tomcat9\bin"
cd /d "D:\java\Tomcat9\bin"
title Tomcat重新启动脚本
net stop tomcat9
ping -n 6 127.1 >nul
wmic process where name="java.exe" get processid,commandline |findstr /i "tomcat" >#
setlocal enabledelayedexpansion
for /f "delims=*" %%i in (#) do (
set var=%%i
set var=!var:start =#!
for /f "tokens=2 delims=#" %%a in ("!var!") do (
set tomcatpid=%%a
)
)
del # >nul
if defined tomcatpid taskkill /pid !tomcatpid!
ping -n 3 127.1 >nul
net start tomcat9
exit
到这里就大功告成了。
--------------------------------------补充-------------------------------------
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' NEQ '0' (goto UACPrompt) else ( goto gotAdmin )
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /B
:gotAdmin
if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
pushd "%CD%"
CD /D "%~dp0"
::cd /d "D:\java\Tomcat9\bin"
cd /d "D:\java\Tomcat9\bin"
脚本中的这一段代码是让脚本命令以管理员身份运行。因为重启命令必须是管理员身份才可以。要不然会拒绝访问的。