Windows下使用Tomcat内置脚本启停方法及自定义脚本报错解决
什么是Tomcat内置脚本启停
Tomcat官方发行包的bin目录中默认自带了适配对应版本的启停控制脚本,Windows环境下为.bat后缀的批处理文件,核心常用的包括:
startup.bat:启动Tomcat服务shutdown.bat:正常停止Tomcat服务
通过内置脚本启停不需要手动配置环境变量、查找进程id操作,脚本会自动加载Tomcat的运行环境配置,执行对应的启停逻辑,比手动敲命令更稳定、容错性更高。
报错问题解决方案
你遇到的C:\Program: command not found报错是路径空格解析问题:你的BASE路径中包含Program Files,路径中的空格没有被正确转义/包裹,bash执行时将空格识别为命令分隔符,只截取了空格前的C:\Program当做可执行文件调用,因此报错。
按以下步骤修改即可解决:
- 给BASE变量的路径加双引号包裹,同时对路径中的空格做转义,或者转换为bash可识别的Unix风格路径,两种写法二选一:
写法1(Windows风格路径转义):
写法2(Unix风格路径,适配Git Bash/WSL环境):export BASE="C:\Program\ Files\Apache Software Foundation\Tomcat 10.0\bin"export BASE="/c/Program Files/Apache Software Foundation/Tomcat 10.0/bin" - 所有调用
$BASE的位置都加双引号包裹,避免空格再次触发解析问题:
把脚本中所有$BASE/startup.bat、$BASE/shutdown.bat修改为"$BASE"/startup.bat、"$BASE"/shutdown.bat
Windows环境更适配的原生批处理脚本(可选)
如果你是在Windows原生CMD下操作,不需要依赖bash环境,可以直接使用.bat后缀的批处理脚本,兼容性更好,参考代码如下:
@echo off set "BASE=C:\Program Files\Apache Software Foundation\Tomcat 10.0\bin" set "prog=apache-tomcat-10.0.11" if "%1"=="start" goto start if "%1"=="stop" goto stop if "%1"=="restart" goto restart if "%1"=="status" goto status echo Usage: tomcat.bat start^|stop^|restart^|status goto end :status tasklist | findstr /i "%prog%" >nul if %errorlevel% equ 0 (echo Tomcat is running.) else (echo Tomcat is not running.) goto end :start tasklist | findstr /i "%prog%" >nul if %errorlevel% equ 0 ( echo Tomcat seems to be running. Use the restart option. ) else ( call "%BASE%\startup.bat" ) goto status :stop call "%BASE%\shutdown.bat" timeout /t 3 /nobreak >nul tasklist | findstr /i "%prog%" >nul if %errorlevel% equ 0 ( for /f "tokens=2 delims= " %%a in ('tasklist ^| findstr /i "%prog%"') do ( taskkill /f /pid %%a >nul ) ) goto status :restart call :stop call :start goto end :end
将上述代码保存为tomcat.bat放在Tomcat的bin目录下,直接在CMD中执行tomcat.bat start、tomcat.bat stop等命令即可完成对应操作。
内容的提问来源于stack exchange,提问作者sam
相关产品推荐
相关产品推荐

