??在实际应用中,我们会发现有些程序(进程)在运行的时候可能会挂掉或电脑关机重启了某些进程没有自动启动,需要我们去监控该程序,并在它挂掉的时候迅速重启,确保该程序能一直运行。比如redis应用服务就经常挂,需要监控程序去监控。
??Linux系统有守护进程的概念,Windows系统可以使用dos批处理实现监控并重启某个进程
,下面将介绍通过批处理实现监控并重启某个进程的全过程。
??下面以redis服务进程redis-server.exe
为例,实现监控并重启该进程的全过程。
该进程的信息如下:
1、进程名称:redis-server.exe
2、进程安装目录:D:\work\redis
示例程序如下:
@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、对应的应用服务的安装目录
??在Windows上创建并运行脚本,需要根据脚本类型进行操作。最常见的脚本类型有批处理文件(.bat或.cmd)和PowerShell脚本。这里我以批处理bat文件为例:
.bat
或.cmd
),这里我的文件名称为:pm_redis.bat
pm_redis.bat
脚本文件。此时会发现redis服务会自动启动,并且会定时检测。??如果需要开机时自动pm_redis.bat
脚本文件自动启动,将脚本文件移动到启动文件夹中。
??在Windows系统中,可以通过多种方法设置应用程序开机自启动,其中一种常见的方法是将应用程序放到启动文件夹中。有两种方式,一种是针对所有用户生效,另一种是只对某个用户生效。操作步骤如下:
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
文件夹中shell:startup
gpedit.msc
已禁用