Windows脚本:监控并自动重启某个进程


Windows脚本:监控自动并重启某个进程

  • 一、简介
  • 二 .bat脚本方式
    • 2.1 编制脚本
    • 2.2 创建并运行脚本
    • 2.3 设置关闭cmd窗口
  • 三、使用VBScript脚本方式
    • 3.1 编制脚本
    • 3.2 运行脚本
  • 四、设置脚本开机自启动
  • 五、某些软件加入启动项后,开机不会自动启动的解决方法

  在实际应用中,我们会发现有些程序(进程)在运行的时候可能会挂掉或电脑关机重启了某些进程没有自动启动,需要我们去监控该程序,并在它挂掉的时候迅速重启,确保该程序能一直运行。比如redis应用服务就经常挂,需要监控程序去监控。
  Linux系统有守护进程的概念,Windows系统可以使用dos批处理实现监控并重启某个进程,下面将介绍通过批处理实现监控并重启某个进程的全过程。

回到目录

一、简介

  下面以redis服务进程redis-server.exe 为例,实现监控并重启该进程的全过程。
1

该进程的信息如下:
1、进程名称: redis-server.exe
2、进程安装目录:D:\work\redis

  要在Windows上实现应用程序的监控,一旦服务停止,立即重新启动有多种方式。目前常用的方式有使用批处理(.bat)、命令提示符(cmd)和VBScript。各有其优缺点,用户根据实际情况自己选择:

  • 批处理(.bat)优点
    • 简单易用:批处理文件是纯文本文件,可以很容易地编写和修改。
    • 执行速度快:批处理文件是直接由命令行解释器执行的,因此执行速度较快
    • 资源占用少:批处理文件占用较少的系统资源。
  • 批处理(.bat)的缺点
    • 功能有限:批处理脚本的功能相对简单,无法实现复杂的逻辑或操作。
    • 错误处理较弱:批处理脚本没有内置的错误处理机制,需要手动编写错误检查和处理代码。
    • 可维护性低:批处理脚本的代码结构简单,难以维护和扩展。
  • 命令提示符(cmd)的优点
    • 功能强大:命令提示符提供了丰富的命令和工具,可以实现各种系统管理和操作
    • 灵活性高:命令提示符支持用户自定义命令和脚本,可以快速执行复杂的操作。
    • 集成度高:命令提示符是Windows系统的标准组件之一,与系统紧密集成。
  • 命令提示符(cmd)的缺点
    • 命令行界面:命令提示符是一个命令行界面,需要用户具备一定的命令行操作经验。
    • 安全性问题:由于命令提示符具有很高的权限,如果用户输入错误的命令或执行恶意脚本,可能会导致系统安全问题。
    • 资源占用较高:相对于批处理文件,命令提示符可能会占用更多的系统资源。
  • VBScript的优点
    • 功能强大:VBScript是一种完整的脚本语言,具有丰富的内置函数和对象模型,可以实现更复杂的逻辑和操作。
    • 易于维护:VBScript支持结构化的编程风格,代码易于阅读和维护。
    • 错误处理:VBScript支持异常处理,可以更好地处理错误和异常情况。
    • 集成度高:VBScript与Windows系统紧密集成,可以利用Windows提供的各种组件和功能。
  • VBScript的缺点:
    • 执行速度较慢:相对于批处理文件和命令提示符,VBScript脚本需要由解释器解释执行,因此执行速度较慢
    • 需要安装解释器:在某些情况下,用户可能需要安装额外的软件或组件才能运行VBScript脚本
    • 安全性问题:由于VBScript脚本是解释执行的,因此可能存在安全风险,需要注意脚本的安全性。

在实际使用中,我们常用的是.bat和VBScript。下面将分别介绍如何使用.bat和VBScript编制redis应用程序线程监护脚本文件。在系统支持的情况下,建议使用VBScript脚本方式来实现应用程序的监听,更方便灵活

回到目录

二 .bat脚本方式

2.1 编制脚本

示例程序如下:

@echo off  
setlocal enabledelayedexpansion  
  
:RESTART  
tasklist /FI "IMAGENAME eq redis-server.exe" | find /C "redis-server.exe" > temp.txt  
set /p num=<temp.txt  
del /F temp.txt  
echo %num%  
if "%num%"=="0" (  
    start "" /D "D:\work\redis" redis-server.exe  
)  
ping -n 10 -w 2000 0.0.0.1 > nul  
goto RESTART

代码说明:

  • tasklist:是列出所有进程,可以指定只列出某用户的进程,用/FI参数过滤。
  • find /C:可以去tasklist的结果中查找指定进程名,并输出个数。
  • ping命令:使用ping命令自带的延迟参数-w,将IP地址设置成一个空地址,设置每隔一段时间去检测进程是否在运行。比如0.0.0.1,这样该命令会一直ping,直到一定n*w 毫秒后才返回(n和w分别是参数-n和-w指定的值)。
  • goto语句:将监控程序设置成死循环。
  • start /D path program:异步调用program程序, 即不等program指定完毕就执行下面的语句,因此可以设置固定间隔(n*w毫秒)去监测。

要是监控其他进程,如下所示图中标出部分都需要修改成实际需求的应用程序信息:

其中:

  • 1、2、4对应的是应用程序名称,对应任务管理器中的进程名称
  • 3、对应的应用服务的安装目录
    1
    使用bat脚本进行监听,在运行Batch(BAT)脚本时,通常会弹出一个命令行窗口来显示脚本的执行,一旦关闭这个窗口,会导致服务停止。这不利于长时间持续的服务监听,因为我们实际工作过程中很容易随手关闭cmd窗口。当然也有方法解决这个问题。

回到目录

2.2 创建并运行脚本

  在Windows上创建并运行脚本,需要根据脚本类型进行操作。最常见的脚本类型有批处理文件(.bat或.cmd)和PowerShell脚本。这里我以批处理bat文件为例:

  1. 创建文件(名称可自定义,后缀以.bat.cmd),这里我的文件名称为:pm_redis.bat
  2. 通过记事本打开文件,将上述代码复制到文件中,并保存,如上图所示。
  3. 双击运行pm_redis.bat脚本文件。此时会发现redis服务会自动启动,并且会定时检测。
    1

回到目录

2.3 设置关闭cmd窗口

  在运行Batch(BAT)脚本时,通常会弹出一个命令行窗口来显示脚本的执行。如果你想在运行BAT脚本时关闭命令行窗口,有几种方法可以实现这个目的:

  • 使用VBScript:
    • 创建一个新的VBScript(.vbs)文件,然后在该文件中使用以下代码来运行你的BAT脚本:
CreateObject("Wscript.Shell").Run "your_script.bat", 0, True

将 “your_script.bat” 替换为你的BAT脚本的路径。双击该VBScript文件,它将在不显示命令行窗口的情况下运行你的BAT脚本。

  • 使用任务计划程序:
    • 使用Windows的任务计划程序创建一个新任务,该任务将运行你的BAT脚本。在任务的属性中,你可以选择“不管用户是否登录都要运行”,并取消勾选“运行时显示新窗口”选项。然后,你可以运行该任务,它将在没有命令行窗口的情况下执行你的BAT脚本。
  • 使用第三方工具:
    • 有一些第三方工具和实用程序,如hstart或Hidden Start,可以在没有命令行窗口的情况下运行BAT脚本。
  • 编译为可执行文件(EXE):
    • 可以使用如Bat To Exe Converter这样的工具将你的BAT脚本转换为可执行文件(EXE),并选择在没有窗口的情况下运行它。

这里我选用的是第一种方法,使用VBScript,到这里还是需要使用VBScript来进行再调用,比较麻烦。所以在系统支持的情况下,建议使用VBScript脚本方式来实现应用程序的监听。如下示例:
1

回到目录

三、使用VBScript脚本方式

3.1 编制脚本

  以下是一个示例脚本,它可以监视一个特定的服务(如redis),并在服务停止时重新启动它。创建一个文件后缀名为.vbs,文件内容如下:

' 定义服务名称  
Const SERVICE_NAME = "redis-server.exe"  
  
' 定义程序的运行路径  
Const PROGRAM_PATH = "D:\work\redis\redis-server.exe"  
  
' 定义一个函数来检查服务状态  
Function IsServiceRunning(serviceName)  
    Dim objService, objWMIService, colServices, service  
    Set objWMIService = GetObject("winmgmts:\\localhost\root\cimv2")  
    Set colServices = objWMIService.ExecQuery("SELECT * FROM Win32_Service WHERE Name='" & serviceName & "'")  
    For Each service In colServices  
        If service.State <> "Stopped" Then  
            IsServiceRunning = True  
            Exit Function  
        End If  
    Next  
    IsServiceRunning = False  
End Function  
  
' 主程序开始  
Do While True  
    If Not IsServiceRunning(SERVICE_NAME) Then  
        ' 服务停止,尝试重新启动服务  
        Dim objShell  
        Set objShell = CreateObject("WScript.Shell")  
        objShell.Run PROGRAM_PATH, 0, True  
        ' 等待一段时间再次检查服务状态,避免立即失败  
        WScript.Sleep 10000 ' 10秒  
    Else  
        ' 服务正在运行,等待一段时间后再次检查  
        WScript.Sleep 5000 ' 5秒  
    End If  
Loop

1

请注意

  • SERVICE_NAME变量设置为你要监视的服务的名称。
  • PROGRAM_PATH变量设置为你要监视的服务的安装运行路径。
  • 可以根据需要调整等待时间和检查频率
  • 将此脚本保存为.vbs文件

回到目录

3.2 运行脚本

   通过双击或在命令行中运行cscript yourscript.vbs来执行它。脚本将进入无限循环,检查服务状态,并在服务停止时重新启动它。

回到目录

四、设置脚本开机自启动

  如果需要开机时脚本文件自动启动,将脚本文件移动到启动文件夹中(.bat或.vbs文件)。
  在Windows系统中,可以通过多种方法设置应用程序开机自启动,其中一种常见的方法是将应用程序放到启动文件夹中。有两种方式,一种是针对所有用户生效,另一种是只对某个用户生效。操作步骤如下:

  1. 所有用户启动都会自动启动:将脚本文件复制到 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup 文件夹中
  2. 指定登录用户启动时会自动启动:打开启动文件夹(本用户的),win+R打开运行窗口,输入:shell:startup
    1
    将对应脚本拖到启动文件夹中。
  3. 将电脑关机,测试会不会自动重启。

回到目录

五、某些软件加入启动项后,开机不会自动启动的解决方法

  • 问题:脚本加入启动项后,开机没有自动启动
  • 原因分析:win10系统,只要是图标右下角带盾牌标志的软件,加入系统的启动文件夹:如:C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp 里面,每次开机后都会启动失败!据说这个是win10出于系统安全考虑,加入了UAC,对系统管理员权限做了限制造成的。
  • 解决方案
  1. win+R打开运行窗口,运行打开组策略(家庭版没有组策略功能),输入:gpedit.msc
    1
  2. 依次展开:计算机配置-》Windows设置-》安全设置-》本地策略-》安全选项-》用户账户控制:以管理员批准模式运行所有管理员,设置为已禁用
    1
    2
    3
  3. 重启计算机

回到目录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/343026.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Flink多流转换(1)—— 分流合流

目录 分流 代码示例 使用侧输出流 合流 联合&#xff08;Union&#xff09; 连接&#xff08;Connect&#xff09; 简单划分的话&#xff0c;多流转换可以分为“分流”和“合流”两大类 目前分流的操作一般是通过侧输出流&#xff08;side output&#xff09;来实现&…

Javaweb之SpringBootWeb案例本地存储的详细解析

2.2 本地存储 前面我们已分析了文件上传功能前端和后端的基础代码实现&#xff0c;文件上传时在服务端会产生一个临时文件&#xff0c;请求响应完成之后&#xff0c;这个临时文件被自动删除&#xff0c;并没有进行保存。下面呢&#xff0c;我们就需要完成将上传的文件保存在服…

ZigBee学习(一)

文章目录 一、ZigBee介绍1.1 ZigBee协议特点1.2 ZigBee协议体系结构1.3 ZigBee设备类型 二、IEEE 802.15.42.1 物理层2.2 MAC层2.3 如何实现网络和设备寻址2.4 能量管理 三、ZigBee网络拓扑结构四、ZigBee配置参数 一、ZigBee介绍 ZigBee是一种基于IEEE 802.15.4标准的高级通信…

网易云音乐JS逆向分析

文章目录 页面分析抓包分析JS逆向分析代码编写 页面分析 先来分析一下页面 当我们点击播放按钮的时候&#xff0c;音乐开始播放。实际上这个逻辑背后的原理是这个按钮后面对应的是一个url&#xff0c;这个地址是通过ajax来进行局部刷新的。 所以我们可以通过抓包工具&#…

防御保护----信息安全

网络安全概述 信息安全&#xff1a;防止任何对数据进行未授权访问的措施&#xff0c;或者防止造成信息有意无意泄露、破坏、丢失等问题的发生&#xff0c;让数据处于远离危险、免于威胁的状态和特性。 网络安全&#xff1a;计算机网络环境下的信息安全。 网络安全背景 网络空间…

Open3D 与 Point Cloud 处理

点云基础3D数据结构点云采集方法点云处理框架点云操作 Open3D基础操作 点云基础 3D数据结构 点云&#xff08;Point Cloud&#xff09;&#xff1a; 点云是由一组离散的点构成的三维数据集合&#xff0c;每个点都包含了坐标信息 (x, y, z) 、颜色 (RGB)、类别 (cls)、强度值等…

宝塔面板部署MySQL并结合内网穿透实现公网远程访问本地数据库

文章目录 前言1.Mysql服务安装2.创建数据库3.安装cpolar3.2 创建HTTP隧道 4.远程连接5.固定TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址 前言 宝塔面板的简易操作性,使得运维难度降低,简化了Linux命令行进行繁琐的配置,下面简单几步,通过宝塔面板cp…

梳理Langchain-Chatchat知识库API接口

一.Langchain-Chatchat 知识库管理 1.Langchain-Chatchat 对话和知识库管理界面 Langchain-Chatchat v0.28 完整的界面截图&#xff0c;如下所示&#xff1a; 2.知识库中源文件和向量库 知识库 test 中源文件和向量库的位置&#xff0c;如下所示&#xff1a; 3.知识库表结构 k…

超融合基础架构理解

1 超融合基础架构 1.1 定义 超融合基础架构&#xff08;Hyper-converged infrastructure&#xff0c;缩写为HCI&#xff09;&#xff0c;是一种集成了存储设备及虚拟运算的信息基础架构框架。在这样的架构环境中&#xff0c;同一厂商的服务器与存储等硬件单元&#xff0c;搭配…

比较有创意的网站

有创意的网站通常展示了独特的设计、交互或内容。以下是一些备受赞誉的有创意的网站&#xff0c;你可以参考&#xff1a; Awwwards: Awwwards 是一个评选并展示全球最优秀网站的平台。你可以在这里找到很多有创意的网站设计。 Awwwards CSS Design Awards: 类似于Awwwards&…

若依分页失败,由于对数据二次处理导致total只有十条

在使用若依框架的过程中&#xff0c;如果是查询结果数据直接返回&#xff0c;那么其自带的分页插件可以正常返回数据以及总条数&#xff0c;但若是对数据进行了其他二次处理&#xff0c;再返回就会出现异常&#xff0c;即无论查询了多少条&#xff0c;total都只会显示10&#x…

实现纯Web语音视频聊天和桌面分享(附源码,PC端+移动端)

在网页里实现文字聊天是比较容易的&#xff0c;但若要实现视频聊天&#xff0c;就比较麻烦了。本文将实现一个纯Web版的视频聊天和桌面分享的Demo&#xff0c;可直接在浏览器中运行&#xff0c;不需要安装任何插件。 一. 主要功能及支持平台 1.本Demo的主要功能有 &#xff…

CSAPP fall2015 深入理解计算机系统 Cache lab详解

Cache Lab cache lab 缓存实验 代码下载 从CSAPP上面下载对应的lab代码 http://csapp.cs.cmu.edu/3e/labs.html 环境准备 需要安装 valgrind。可以参考文章Valgrind centos。 安装好以后执行valgrind --version可以看到版本号。 Cache simulator cache simulator not a …

苹果眼镜(Vision Pro)的开发者指南(5)-主要工具

主要工具有:Xcode、Reality Composer Pro、Unity 第一部分:【用Xcode进行开发】 开始使用Xcode为visionOS进行开发。将向你展示如何在你现有的项目中添加一个visionOS目标,或者构建一个全新的应用,在Xcode预览中创建原型,以及从Reality Composer Pro中导入内容。还将分享…

c++:string相关的oj题(415. 字符串相加、125. 验证回文串、541. 反转字符串 II、557. 反转字符串中的单词 III)

文章目录 1. 415. 字符串相加题目详情代码1思路1代码2思路2 2. 125. 验证回文串题目详情代码1&#xff08;按照要求修改后放到新string里&#xff09;思路1代码2(利用双指针/索引)思路2 3. 541. 反转字符串 II题目详情代码1思路1 4. 557. 反转字符串中的单词 III题目详情代码1&…

[足式机器人]Part3 机构运动学与动力学分析与建模 Ch00-3(3) 刚体的位形 Configuration of Rigid Body

本文仅供学习使用&#xff0c;总结很多本现有讲述运动学或动力学书籍后的总结&#xff0c;从矢量的角度进行分析&#xff0c;方法比较传统&#xff0c;但更易理解&#xff0c;并且现有的看似抽象方法&#xff0c;两者本质上并无不同。 2024年底本人学位论文发表后方可摘抄 若有…

机器学习笔记:地理加权回归(GWR)

1 传统的线性回归 机器学习笔记&#xff1a;线性回归_线性回归的读书笔记-CSDN博客 最优的β为&#xff1a; 2 地理加权回归&#xff08;GWR&#xff09; 2.1 模型概述 地理加权回归&#xff08;Geographically Weighted Regression&#xff0c;GWR&#xff09;是传统回归分…

【算法小记】——机器学习中的概率论和线性代数,附线性回归matlab例程

内容包含笔者个人理解&#xff0c;如果错误欢迎评论私信告诉我 线性回归matlab部分参考了up主DR_CAN博士的课程 机器学习与概率论 在回归拟合数据时&#xff0c;根据拟合对象&#xff0c;可以把分类问题视为一种简答的逻辑回归。在逻辑回归中算法不去拟合一段数据而是判断输入…
最新文章