以下是一个Windows批处理脚本,它可以检查指定端口是否被占用,如果未被占用则启动Tomcat服务器:
@echo off
setlocal enabledelayedexpansion
:: 配置参数
set TOMCAT_HOME=D:\apache-tomcat-9.0.50
set TOMCAT_PORT=8080
set TIMEOUT=30
:: 检查端口是否被占用
echo 正在检查端口 %TOMCAT_PORT% 是否可用...
netstat -ano | findstr ":%TOMCAT_PORT%" > nul
if %errorlevel% equ 0 (
echo 错误:端口 %TOMCAT_PORT% 已被占用!
for /f "tokens=5" %%a in ('netstat -ano ^| findstr ":%TOMCAT_PORT%"') do (
set pid=%%a
echo 占用进程PID: !pid!
tasklist | findstr "!pid!"
)
pause
exit /b 1
) else (
echo 端口 %TOMCAT_PORT% 可用,准备启动Tomcat...
)
:: 启动Tomcat
echo 正在启动Tomcat...
call "%TOMCAT_HOME%\bin\startup.bat"
:: 等待Tomcat启动
echo 等待Tomcat启动(最多等待 %TIMEOUT% 秒)...
set /a counter=0
:wait_loop
timeout /t 1 > nul
netstat -ano | findstr ":%TOMCAT_PORT%" > nul
if %errorlevel% equ 1 (
set /a counter+=1
if !counter! lss %TIMEOUT% (
echo 等待Tomcat启动(!counter!/%TIMEOUT%)...
goto wait_loop
) else (
echo 错误:Tomcat在%TIMEOUT%秒内未能成功启动!
pause
exit /b 1
)
)
echo Tomcat已成功启动!
echo 访问地址: http://localhost:%TOMCAT_PORT%/
pause
配置参数:
TOMCAT_HOME
:修改为你的Tomcat安装目录TOMCAT_PORT
:修改为你Tomcat使用的端口号(默认8080)TIMEOUT
:设置等待Tomcat启动的最大秒数功能说明:
使用方法:
.bat
文件(如start_tomcat.bat
)如果需要更复杂的功能,可以考虑以下改进:
:: 在检查端口被占用的部分添加
set /p kill=端口被占用,是否要终止该进程(Y/N)?
if /i "!kill!"=="Y" (
taskkill /F /PID !pid!
echo 已终止进程 !pid!
timeout /t 2 > nul
goto :start_tomcat
)
多Tomcat实例管理: 可以修改脚本使其接受命令行参数,从而管理多个Tomcat实例。
日志记录: 将启动过程和结果记录到日志文件中便于后续排查问题。