目录
一、背景
springboot项目偶尔会发生宕机故障,增加一个脚本自动重启springboot项目。
重启逻辑:使用curl命令调用接口,获取状态码,如果状态码不等于200则重启项目。
二、脚本
@echo off
:checkstart
echo start%date%%time%
echo start%time% >> d:\bat_log.txt
set port=8080
echo check api
set url=curl -X POST "http://localhost:8080/poi/demo" -H "dateFormat:yyyy-MM-dd" -H "Request-Origion:SwaggerBootstrapUi" -H "accept:*/*" -H "Content-Type:application/x-www-form-urlencoded;charset=UTF-8" -I -m 10 -o /dev/null -s -w %%{http_code}
set result=-1
::测试接口
for /f "tokens=*" %%i in ('%url%') do (
echo httpCode:%%i
echo httpCode:%%i >> d:\bat_log.txt
set result=%%i
)
echo result:%result%
if %result% equ 200 (
echo ok
echo ok >> d:\bat_log.txt
) else (
echo error
echo error >> d:\bat_log.txt
for /f "tokens=5" %%i in ('netstat -ano^|findstr "%port%"') do (
echo kill the process %%i who use the port
::杀死进程
taskkill /pid %%i -t -f
)
::关闭之前的cmd窗口(需要在启动脚本加上title 8080.bat)
taskkill /fi "WINDOWTITLE eq 8080.bat" /IM cmd.exe /F /t
echo start jar
::启动项目
start cmd /k call D:\jar\start
)
::延时1分钟
ping -n 60 0.0.0.1 >nul 2>nul
goto :checkstart
echo end
pause
三、注意事项
1.cmd窗口title
在start.bat脚本中增加title 8080.bat才能正确的关闭窗口
2.管理员关闭cmd窗口问题
如果是用管理启动的脚本,需要在关闭是增加管理员: (注意:冒号后面有两个空格,守护脚本也需要用管理员权限启动)
taskkill /fi "WINDOWTITLE eq 管理员: cloudpc-export8088" /IM * /F /t
3.脚本编码问题
文件编码改成ANSI编码正常(中文乱码会引起管理员窗口无法关闭)
4.常用命令
taskkill /FI "WINDOWTITLE eq 管理员: 1" /IM * /F /t
tasklist /V /FI "WindowTitle eq 管理员*"