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

news2024/9/25 21:25:35


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.coloradmin.cn/o/1408488.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代码随想录算法训练营第十四天|二叉树基础-二叉树迭代-二叉树

文章目录 二叉树基础二叉树种类满二叉树完全二叉树二叉搜索树平衡二叉搜索树 二叉树的存储方式链式存储顺序存储 二叉树的遍历方式二叉树的定义 二叉树的递归遍历144.二叉树的前序遍历代码&#xff1a; 145.二叉树的后序遍历代码&#xff1a; 94. 二叉树的中序遍历代码 二叉树的…

Linux中并发程序设计

进程的创建和回收 进程概念 概念 程序 存放在磁盘上的指令和数据的有序集合&#xff08;文件&#xff09; 静态的 进程 执行一个程序所分配的资源的总称 动态的进程和程序比较 注&#xff1a;进程是存在RAM中&#xff0c;程序是存放在ROM(flash)中的进程内容 BSS段&#xff…

Unity通用渲染管线升级URP、HDRP

Unity通用渲染管线升级URP、HDRP 一、Build-in Pipline升级到 URP 一、Build-in Pipline升级到 URP 安装URP包 升级所有材质&#xff08;升级完成后材质会变成紫红色&#xff0c;Shader丢失&#xff0c;此为正常现象&#xff09; 创建 UniversalRenderPipelineAsset 配置文…

Origin:调整颜色刻度线间距和小数点

如何设置或修改Color Scale 的间距和小数位&#xff1f; 答&#xff1a;&#xff08;1&#xff09;更改间距&#xff1a;左键双击刻度标线——级别——“显示主刻度在”下选择自定义级别——在“值”输入自定义间距增量。 &#xff08;2&#xff09;更改小数点个数&#xff1a…

嵌入式-stm32-江科大-OLED调试工具

文章目录 一&#xff1a;OLED调试工具1.1 OLED显示屏介绍1.2 实验&#xff1a;在OLED显示屏的使用1.3 自己新增功能测试道友&#xff1a;今天没有开始的事&#xff0c;明天绝不会完成。 一&#xff1a;OLED调试工具 1.1 OLED显示屏介绍 学习任何一门语言就需要进行调试&#…

民用激光雷达行业简析

01. 激光雷达是“机器之眼” • 激光雷达是一个通过发射激光并接受发射激光同时对其进行信号处理&#xff0c;从而获得周边物体距离等信息的主动测量装置。 • 激光雷达主要由光发射、光扫描、光接收三大模块组成。光发射模块集成了驱动、开关和光源等芯片。光接收模块集成了…

浏览器安装证书,使用burp抓取任意https协议的流量

抓包显示都是http的。 接受风险后&#xff1a; 给burp加证书&#xff1a; 点击后会让你下载&#xff0c;证书已下载 证书长这个样子~~~ 浏览器设置中直接搜索证书&#xff1a; 勾选信任&#xff1a; 会到之前加载不出的页面刷新就可以看到加载出来图片等&#xff1a; 此时看到…

【大数据】Flink 系统架构

Flink 系统架构 1.Flink 组件1.1 JobManager1.2 ResourceManager1.3 TaskManager1.4 Dispatcher 2.应用部署2.1 框架模式2.2 库模式 3.任务执行4.高可用设置4.1 TaskManager 故障4.2 JobManager 故障 Flink 是一个用于状态化并行流处理的分布式系统。它的搭建涉及多个进程&…

服务器的组成

服务器的重要结构组成 家用电脑组成&#xff1a; CPU、主板、内存条、显卡、硬盘、电源、风扇、网卡、显示器、机箱、键盘鼠标等等。 CPU CPU是电脑的大脑&#xff0c; CPU发展史&#xff1a; 32 位CPU&#xff1a;最大的内存寻址地址2^32&#xff0c;大约4G的大小。 CP…

【基础算法练习】二分模板

文章目录 二分模板题二分的思想C 版本的二分整数二分模板 Golang 版本的二分整数二分模板 例题&#xff1a;在排序数组中查找元素的第一个和最后一个位置题目描述C 版本代码Golang 版本代码 二分模板题 704. 二分查找&#xff0c;这道题目是最经典的二分查找&#xff0c;使用于…

Git操作指南

Git操作指南 Git是一款非常强大的版本控制工具&#xff0c;可以帮助开发者管理代码的版本、协同开发以及进行代码的发布。以下是一些常见的Git操作指南。 基本操作 初始化一个Git仓库 git init添加文件到暂存区 git add 文件名提交更改到本地仓库 git commit -m "提…

Simulink|光伏并网逆变器低电压穿越仿真模型

目录 主要内容 模型研究 1.模型总览 2.boost模块 3.Inverter模块 4.控制模块 5.信号模块 结果一览 下载链接 主要内容 该模型为光伏逆变器低电压穿越仿真模型&#xff0c;采用boost加NPC拓扑结构&#xff0c;基于MATLAB/Simulink建模仿真。模型具备中点平衡…

CentOS安装Redis教程-shell脚本一键安装配置

文章目录 前言一、Redis单机版安装教程1. 复制脚本2. 增加执行权限3. 执行脚本 二、Redis扩展集群版安装教程1. 安装Redis单机版2. 复制脚本3. 增加执行权限4. 执行脚本5. 测试6. redis_cluster.sh 命令6.1 启动Redis扩展集群6.2 停止Redis扩展集群6.3 查看Redis扩展集群节点信…

在虚拟时空对话邓中亮院士,元宇宙访谈节目强势出圈

​​2023年12月&#xff0c;由米果集团、浙江省元宇宙产业基地联合出品的《科技领军人物的思维模式解析》访谈节目上线。在节目制作过程中&#xff0c;主持人对话“国际欧亚科学院院士、北京邮电大学邓中亮教授”&#xff0c;全程使用蓝海创意云的“vLive虚拟直播”系统进行节目…

Dubbo 3.x源码(16)—Dubbo服务发布导出源码(5)

基于Dubbo 3.1&#xff0c;详细介绍了Dubbo服务的发布与引用的源码。 此前我们学习了Dubbo 3.x源码(15)—Dubbo服务发布导出源码(4)&#xff0c;也就是Dubbo远程服务导出export方法的上半部分&#xff0c;也就是doLocalExport源码&#xff0c;将会得到一个Exporter。 现在我们…

LLM之RAG理论(七)| 高提升RAG检索的四种方法

​ RAG两大核心组件&#xff1a;检索和生成。本文将总结四种提高RAG系统检索质量的技术&#xff1a;1&#xff09;子问题查询引擎&#xff08;来自LlamaIndex&#xff09;&#xff0c;2&#xff09;RAG-Fusion、3&#xff09;RAG-end2end和4&#xff09;LoRA微调。 一、L…

司铭宇老师:门店经理培训:如何成为一位卓越的门店经理

门店经理培训&#xff1a;如何成为一位卓越的门店经理 在激烈的市场竞争中&#xff0c;门店经理作为门店的灵魂人物&#xff0c;肩负着提升门店业绩、维护品牌形象、带领团队成长等重要职责。本文将为您解析如何成为一位卓越的门店经理&#xff0c;助力您的职业生涯迈向新高峰…

5个程序员可以接私活的平台和一些建议

22年之前我从没有接触过程序员外包接单&#xff0c;也没有任何的私活接单经验&#xff0c;就纯纯看自己瞎摸索&#xff0c;通过Google搜索&#xff0c;在各类程序员私活接单平台上摸爬滚打&#xff0c;硬是杀出一条血路&#xff0c;从一开始的年入3k到现在每月稳定收入1w&#…

【排序算法】C语言实现归并排序,包括递归和迭代两个版本

文章目录 &#x1f680;前言&#x1f680;归并排序介绍及其思想&#x1f680;递归实现&#x1f680;迭代实现 &#x1f680;前言 大家好啊&#xff01;阿辉接着更新排序算法&#xff0c;今天要讲的是归并排序&#xff0c;这里阿辉将讲到归并排序的递归实现和迭代实现&#xff…

AI服务器行业分析:预计2023年全球市场规模将达211亿美元

AI服务器需求暴增&#xff0c;机构指出&#xff0c;AI时代浪潮汹涌&#xff0c;海量数据催生庞大的算力需求&#xff0c;带动AI服务器需求量与日俱增&#xff0c;用于服务器内、外部数据传输等接口芯片也随之攀升。 ChatGPT大火后&#xff0c;各大科技企业纷纷发力AI大模型&…