Windows脚本:监控并自动重启某个进程 您所在的位置:网站首页 windows控制台程序不让快速运行完成任务怎么设置 Windows脚本:监控并自动重启某个进程

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

2024-07-10 22:31| 来源: 网络整理| 查看: 265

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= 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文件为例:

创建文件(名称可自定义,后缀以.bat或.cmd),这里我的文件名称为:pm_redis.bat通过记事本打开文件,将上述代码复制到文件中,并保存,如上图所示。双击运行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来执行它。脚本将进入无限循环,检查服务状态,并在服务停止时重新启动它。

如果允许时弹框提示报错,且错误信息是800A0408,通常表示在编程或脚本执行过程中遇到了无效的字符。这个错误可能由多种原因引起,如文本编码、特殊字符的使用等。为了解决这个问题,可以尝试以下方法:

检查脚本编码:在VB中通常使用ANSI编码。可以使用文本编辑器(如记事本)打开脚本,然后另存为ANSI编码的文件。检查特殊字符:检查脚本中是否使用了无效或特殊的字符。使用正确的语法和字符:例如在VB中,字符串应该用双引号(“”)括起来,而不是单引号(')

回到目录

四、设置脚本开机自启动

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

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

回到目录

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

回到目录



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有