参考这篇博文https://www.cnblogs.com/sunfie/p/7071424.html
不过它里面有一些空格问题,和for循环集中运行命令失败问题,并不能用。
bat注意事项
- set 设置变量的时候,=前后都不要有空格
- qprocess.exe显示全部进程,进程名称是全小写,如果进程的名称过长,并不会完全显示,做find匹配的时候要注意。
代码如下:
start.bat
@echo off
cd /d %~dp0
set _task=factorsserve
set _svr=FactorsServer.exe
set _des=restart.bat
cd x64.Release
:checkService
qprocess.exe|find "%_task%">..\process.txt
for /f "delims=" %%n in (..\process.txt) do (
goto checkMessage
)
goto restartService
:restartService
echo %time%
echo ********程序开始启动********
echo 程序重新启动于 %time% ,请检查系统日志 >> ..\restart_service.log
echo start %_svr% > %_des%
echo exit >> %_des%
start %_des%
REM set /p=.<nul 不换行在屏幕输出....
set /p=.<nul
for /L %%i in (1 1 10) do set /p a=.<nul & ping.exe /n 2 127.0.0.1>nul
echo .
del %_des% /Q
echo ********程序启动完成********
goto checkService
:checkMessage
echo %time% 程序运行正常,5秒后继续检查..
ping localhost -n 5
goto checkService
说明:1. 要监控的进程是FactorsServer.exe
2. 对应的进程名称串查找factorsserve
3. restart.bat是重启进程的时候临时写的bat
4. 查找进程统一放在process.txt文件中,在for循环中查找。理论上只要一条信息。除非你事先打开了2个进程
5. cd /d %~dp0 去到start.bat的当前目录下。
6. 我的程序放在下一层文件夹x64.Release中。所以cd 进去x64.Release,然后写日志的时候…\出来到上一层。
7. 用ping做定时控制并不是十分准确的。