如何检测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)最后等待启动执行即可,也可以手动点击【运行】。
如何检测Windows服务停止后自动启动?自动运行.bat批处理文件?的更多相关文章
- 监控windows服务,当服务停止后自动重启服务
近期花时间研究了一下windows和linux下某服务停了后自动重启的功能,在网上收集了些资料,并经过测试,在此整理一下.这里介绍的是windows服务的监控,是通过批处理来实现的.本例是监控wind ...
- 子线程导致 Windows 服务停止的情况(Topshelf 结合 Quartz.NET)
Ø 前言 本文主要记录子线程导致 Topshelf 和 Quartz.NET 的 Windows 服务停止的现象,以及使用几种常用子线程的注意事项.因为我们有时可能需要开启多个线程执行复杂的逻辑,如 ...
- InstallShield2015制作安装包----------安装后实现自动运行
安装向导完成后,自动运行. 实现的手段是:InstallScript脚本OnEnd()函数里面,调用可执行程序. 备注:INSTALLDIR预定义变量存放着程序的安装目录. //安装后运行dispat ...
- Xfce4里添加登录后程序自动运行
Xfce4里添加登录后程序自动运行 (注意该方法在登录桌面环境后才会自动运行程序. 在XUbuntu下测试过, Ubuntu下应该是类似的) 方法1: 找到这个东西, 自动添加一下 方法2: 在 .c ...
- C#编写的windows服务安装后启动提示“服务启动后又停止了”
使用C#编写的windows服务安装到服务器上行后进行启动时,总是提示“服务启动后又停止了”. 检查了服务逻辑是没问题,安装在开发本地也是正常,网上查了资料说是可能是服务没有注册,我检查了服务是正常注 ...
- C# — Windows服务安装后自动停止问题
今天在使用VS创建一个Windows服务时,为了得到一些提示,引用了Windows.Forms程序集,然后使用MessageBox.Show()方法渴望得到一些弹窗提示: 但是最后在安装好服务后,在任 ...
- windows服务编写和“以管理员运行”程序的方法
本文将首先解释如何 创建 一个定期查询可用物理内存并将结果写入某个文本文件的服务.然后指导你完成生成,安装和实现服务的整个过程. 第一步:主函数和全局定义 首先,包含所需的头文件.例子要调用 Win3 ...
- Windows开机自动运行.bat文件
方法/步骤:一:打开我的电脑, 在地址栏输入:"C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup" 二,把自 ...
- VS2012编译的Windows服务启动后立即停止的解决方案
ATL中的BUG,在没有COM的服务中,使用_ATL_NO_COM_SUPPORT. 并在服务中添加下面的代码 #if defined(_ATL_NO_COM_SUPPORT) HRESULT Pre ...
- windows服务删除后,在次安装时无法安装启动。
当我在windows的cmd下卸载evtsys evtsys -u 再次安装时evtsys.exe -i -h 192.168.32.12 -p 514 提示“指定的服务已标记为删除”,进入服务管理 ...
随机推荐
- 《Java极简设计模式》第01章:单例模式(Singleton)
作者:冰河 星球:http://m6z.cn/6aeFbs 博客:https://binghe.gitcode.host 文章汇总:https://binghe.gitcode.host/md/all ...
- 详情讲解canvas实现电子签名
签名的实现功能 我们要实现签名: 1.我们首先要鼠标按下,移动,抬起.经过这三个步骤. 我们可以实现一笔或者连笔. 按下的时候我们需要移动画笔,可以使用 moveTo 来移动画笔. e.pageX,e ...
- 程序员:你如何写可重复执行的SQL语句?
上图的意思: 百战百胜,屡试不爽. 故事 程序员小张: 刚毕业,参加工作1年左右,日常工作是CRUD 架构师老李: 多个大型项目经验,精通各种开发架构屠龙宝术: 小张注意到,在实际的项目开发场景中,很 ...
- springboot项目自动关闭进程重启脚本
话不多说,先上脚本 kill -15 $(netstat -nlp | grep :9095 | awk '{print $7}' | awk -F"/" '{ print $1 ...
- 提高 Web 开发效率的10个VS Code扩展插件,你知道吗?
前言 一个出色的开发工具可以显著提高开发人员的开发效率,而优秀的扩展插件则能更进一步地提升工具的效率.在前端开发领域,VSCode毫无疑问是目前最受欢迎的开发工具.为了帮助前端开发人员提高工作效率,今 ...
- [错误] SQL logic error near "date": syntax error
问题的来源 今天把一个项目的数据库从MySQL改到Sqlite 调试时发生了这个错误. 百度又看不懂英文(很多是国外发的), 就折腾了一下 原因 C# Sqlite 不能使用参数前缀"?&q ...
- bash: accelerate: command not found
py AIGC Stable Diffusion文生图Lora模型微调实现虚拟上装详情 实验手册 实验报告 3. 安装Diffusers 进入PAI-DSW开发环境. 登录PAI控制台. ...
- Python 提取PDF文本和图片
从PDF中提取内容能帮助我们获取文件中的信息,以便进行进一步的分析和处理.此外,在遇到类似项目时,提取出来的文本或图片也能再次利用.要在Python中通过代码提取PDF文件中的文本和图片,可以使用 S ...
- CF1877 Div2 A-E 题解
A 显然 \(n\) 个队的得分之和为 \(0\),因此答案为这 \(n-1\) 个数的和的相反数. 赛时代码 B 小贪心. 将所有人按 \(b\) 升序排序,\(b\) 相同时按 \(a\) 降序, ...
- 使用 mt19937 生成区间随机数
#include <cstdio> #include <random> #include <ctime> using namespace std; int main ...