优化版:监控控windows服务,当服务停止后自动重启服务,保障服务正常运行(并以管理员身份运行bat)

·

监控控windows服务,当服务停止后自动重启服务,保障服务正常运行(并以管理员身份运行bat)

近期花时间研究了一下windows和linux下某服务停了后自动重启的功能,在网上收集了些资料,并经过测试,在此整理一下。这里介绍的是windows服务的监控,是通过批处理来实现的。本例是监控windows的主题Themes服务为例,每180秒检测一次(可根据实际需要调整间隔),当发现服务停止则自动重启服务。

 

新建一个记事本,连同扩展名一起并重命名为AutostartService.bat

批处理文件内容如下: 

 (注: 请在下方配置间隔时间和需要监测的服务  这里请替换为自己需要监控的服务名称,可以打开Windows服务功能通过查看服务属性来查询服务名称<不是显示名> )

@echo off
title 监控windows服务,当服务停止后自动重启服务,保障服务正常运行
color 0a
mode con cols=45 lines=30

:: 获取管理员权限
setlocal
set uac=~uac_permission_tmp_%random%
md "%SystemRoot%\system32\%uac%" 2>nul
if %errorlevel%==0 ( rd "%SystemRoot%\system32\%uac%" >nul 2>nul ) else (
    echo set uac = CreateObject^("Shell.Application"^)>"%temp%\%uac%.vbs"
    echo uac.ShellExecute "%~s0","","","runas",1 >>"%temp%\%uac%.vbs"
    echo WScript.Quit >>"%temp%\%uac%.vbs"
    "%temp%\%uac%.vbs" /f
    del /f /q "%temp%\%uac%.vbs" & exit )
endlocal

rem 请在下方配置间隔时间和需要监测的服务:(e.g. 三分钟180秒 主题服务Themes)
set secs=180
set srvname="Themes"

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

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 net start %srvname%
set svrst=
rem 下面的命令用于延时,否则可能会导致cpu单个核心满载。
ping -n %secs% 127.0.0.1 > nul
goto chkit

:end

 

 

············

 

 

·

 

posted @ 2020-03-27 10:56  亟待!  阅读(888)  评论(0)    收藏  举报
……