关于windows服务名称意义与监控服务自动启动脚本的雷

背景

我们暗黑破坏神2私服战网最近有时会自动崩溃,在排查出问题之前,我准备先写个脚本,当服务挂掉时自动启动服务。

batch脚本:

@echo off
set secs=60
set srvname="pvpgn"

echo.>>log.txt
echo ========================================>>log.txt
echo == 查询计算机服务的状态, ==>>log.txt
echo == 每间隔%secs%秒种进行一次查询, ==>>log.txt
echo == 如发现其停止,则立即启动。 ==>>log.txt
echo ========================================>>log.txt
echo.>>log.txt
echo 此脚本监测的服务是:%srvname%>>log.txt
echo.>>log.txt

if %srvname%. == . goto end

:chkit
set svrst=0
for /F "tokens=1* delims= " %%a in ('net start') do if /I "%%a %%b" == %srvname% set svrst=1
if %svrst% == 0 (
   echo ^>%date:~0,10% %time:~0,8% 没有发现程序进程>>log.txt
   echo ^>%date:~0,10% %time:~0,8% 正在重新启动程序>>log.txt
   net start %srvname% && echo ^>%date:~0,10% %time:~0,8% 启动程序成功>>log.txt
)else(
   echo ^>%date:~0,10% %time:~0,8% 程序正在运行>>log.txt
)
set svrst=1
ping -n %secs% 127.0.0.1 > nul
goto chkit

:end

看上去似乎没有任何问题,但在实际运行中会瞬间关闭,是在

if %srvname%. == . goto end

这里退出掉的。

排查:

在上边代码那里退出的原因是由于srvname即服务名称没有找到而关闭的,由于没有这个服务,所以无法判断是否启动了服务,无法进入循环中。

关于windows服务名称意义与监控服务自动启动脚本的雷_第1张图片

在服务器的任务管理器查看时服务是运行着的,那么问题在哪呢?

原因与解决:

很明显,是由于服务名称错误导致的,那么任务管理器显示的肯定不是真实服务名称,我进入了服务后查看了对应的服务:

关于windows服务名称意义与监控服务自动启动脚本的雷_第2张图片

果然,它有“服务名称”、“显示名称”、“说明”这三个属性,而让我产生误导的便是这“服务名称”,脚本里应该使用“显示名称”才能找到对应的服务。改了下脚本中的服务名后成功运行。

 

 

 

 

 

你可能感兴趣的:(杂项)