如何检测Windows服务停止后自动启动?自动运行.bat批处理文件?

作者:西瓜程序猿

主页传送门:https://www.cnblogs.com/kimiliucn

前言

想要确保你的Windows服务即使在崩溃后也能自动重启吗?这篇文章教你如何用一个小巧的批处理脚本来实现这一点。教你怎么设置定时检查,如果发现服务挂了,就立刻拉起来。跟着步骤做,让你的服务稳定运行不再是难题!

某一天,一个开发者写了一个消息队列消费端,部署到Windows服务上后,发现这个服务会不定时的无缘无故停止掉,既没有日志也没有任何事件能通知,就很诡异。在一个漆黑的夜晚,他找到了[西瓜程序猿],说帮他写一个程序自动启动运行Windows服务,这不就来了嘛!

一、检测服务停止并自动开启

1.1-思路

这里主要就是写一个.bat批处理文件,然后循环监控一个特定的Windows服务,如果服务停止了则尝试重新进行开启它,并且每隔N秒(自定义)检测一次服务的状态。然后需要一直运行着这个批处理文件。

2.2-源代码

在自己电脑/服务器中新建一个【xxx.bat】文件,然后写入以下代码,bat文件可直接双击运行,写好后可以自行运行看一下效果。

复制代码
@echo off
rem 定义循环间隔时间和监测的服务:
set secs=60
set srvname="服务名"
 
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

注意:

运行成功截图(如果出现乱码也没关系):

二、自动运行.bat批处理文件

我们知道上面检测服务是否已停止的.bat批处理文件需要一直运行着,也就是只要将黑窗口关闭调,程序就停止了。所以我们需要将这个.bat文件放在后台一直保持运行着。[西瓜程序猿]这边以部署在【任务计划程序】作为例子,让.bat文件每1分钟自动执行一次。然后是在Windows Server服务器上执行(PC电脑上操作有细微区别)。

2.1-前期准备

前期要进行如下配置,不然可能会报"操作员或系统管理员拒绝了请求。(Ox800710EO)"等错误(如果不配置可能不会执行:定时任务未配置在一个有效的组内,或者定时任务所在用户组用户无效或无权限),配置好后最好重启一下电脑/服务器,不然可能导致无法生效。

(1)首先输入【win+R键,然后输入 gpedit.msc 】或者直接搜索【本地安全策略】。

(2)点击【本地策略------>用户权限分配------>允许本地登录】右击,然后点击【属性】。

然后点击【添加用户或组】,在输入对象名称来选择输入框中输入【Administrator】,然后点击【检查名称】,可能会多出一些前缀或者下划线,这个没关系说明检测到了。然后点击【确认】即可。

(3)点击【本地策略------>用户权限分配------>作为批处理文件登录】右击,然后点击【属性】,然后步骤同上即可。

(4)点击【本地策略------>安全选项------>域控制器:允许服务器操作者计划任务】右击,然后点击【属性】

然后选择【已弃用】,最后点击【确定】即可。

2.2-创建任务执行程序

(1)打开【任务计划程序】。

(2)然后点击【创建任务】,在【常规】Tab选项中,输入【名称】,勾选【不管用户是否登录都要运行】,勾选【使用最高权限运行】,不然可能导致没有权限执行该任务。

(3)在【触发器】Tab选项中,点击【新建】来创建一个触发器,也就是在什么时间来执行这个任务。[西瓜程序猿]以每1分钟来执行,持续时间为无限期。

(4)在【操作】Tab选项中,点击【新建】来创建一个触发器,也就是要执行的具体任务。[西瓜程序猿]以执行.bat文件作为例子。


(5)在【条件】Tab选项中,取消勾选【只有在计算机使用交流电源时才启动此任务】。

(6)在【设置】Tab选项中,如果此任务已经运行,以下规则适用【停止现有实例】(根据自己需求进行选择即可),最后点击【确认】任务就创建好了。

(6)最后等待启动执行即可,也可以手动点击【运行】。

相关推荐
程序员西西1 天前
SpringBoot无感刷新Token实战指南
java·开发语言·前端·后端·计算机·程序员
搞科研的小刘选手2 天前
【厦门大学主办】第六届计算机科学与管理科技国际学术会议(ICCSMT 2025)
人工智能·科技·计算机网络·计算机·云计算·学术会议
程序员西西2 天前
SpringBoot轻松整合Sentinel限流
java·spring boot·后端·计算机·程序员
程序员西西2 天前
SpringBoot整合JWT实现安全认证
java·计算机·程序员·编程
程序员西西4 天前
SpringCloudGateway入门实战
java·spring boot·计算机·程序员·编程
jay神9 天前
【原创】基于YOLO模型的手势识别系统
深度学习·yolo·计算机·毕业设计·软件设计与开发
程序员鱼皮10 天前
颜色网站为啥都收费?自己做个要花多少钱?
计算机·程序员·互联网·编程·网站
Halo_tjn11 天前
Java 基于分支和循环结构的专项实验
java·开发语言·计算机
梁辰兴12 天前
计算机网络基础:计算机网络概述
计算机网络·计算机·概述·计算机网络基础
程序员鱼皮14 天前
大厂违约金汇总一览表
计算机·程序员·职场·求职