批处理文件监测python程序并自动启动

发布于:2025-04-17 ⋅ 阅读:(23) ⋅ 点赞:(0)

服务器有个python程序在跑,但不稳定,只要网络不通或者别的什么原因,它就会自动退出。本来应该修改这个python程序,但它不是我写的,作者已经离职,而我对python不熟悉。项目时间紧,我就想写个批处理命令,然后用windows的任务计划运行这个批处理命令,每隔一段时间(比如每分钟)检查一下该进程,如果还在运行则忽略,否则自动打开该程序。

一、批处理命令

批处理命令的内容主要是,检查有没有python的进程在运行,有的话就认为我说的那个python程序在跑了,因为服务器没有别的python程序。其实这也是我们这个批处理命令可以工作的前提。如果是多个python程序,那批处理这种弱鸡就分辨不出来了。它并不知道进程对应哪个具体的python程序。

检查有无python的进程在运行,是将命令的返回信息,一行一行地甄别,如果含有“python.exe”字眼,就认为有。就是这句:

tasklist /FI "IMAGENAME eq python.exe"

它会返回系统中有无py.exe进程运行的信息:

1)如果没有
在这里插入图片描述

2)如果有
在这里插入图片描述
%%A 就是每行信息。比如上图就有3行,第一行是"映像名称。。。"

完整的批处理命令:

@echo off

:: 启用延迟扩展
setlocal enabledelayedexpansion

:: 初始化标志变量
set "is_running=0"

:: 使用 tasklist 获取 py.exe 的进程列表
for /F "tokens=*" %%A in ('tasklist /FI "IMAGENAME eq python.exe"') do (
    echo %%A | find /I "python.exe" >nul
    if !errorlevel! equ 0 (
       set "is_running=1"
    )
)

if %is_running% equ 1 (
    echo 目标 Python 程序已经在运行
) else (
    echo 开启目标 Python 程序...
    start D:\jbh2022\DyEnv\DyEnvRealData.py
    echo [%date% %time%] 开启目标 Python 程序... >> D:\jbh2022\DyEnv\monitor.log
)

注意顶部有一句:

:: 启用延迟扩展
setlocal enabledelayedexpansion

这句话比较重要,如果没有,则errorlevel则不会返回正确的值,AI的解释是如果没有这一句,errorlevel永远是初始值。

二、windows任务计划运行批处理命令

配置没有什么好说的。注意任务计划运行批处理命令,是没有窗口弹出的。所以不要以为没有看到窗口,就怀疑没有运行的。可以在批处理命令中输出日志:

echo [%date% %time%] 开启目标 Python 程序... >> D:\jbh2022\DyEnv\monitor.log

其中 “开启目标 Python 程序…”即为日志内容,[%date% %time%]是时间戳,日志文件为D:\jbh2022\DyEnv\monitor.log。

三、小结

批处理命令十分弱鸡。前面说道,如果多于一个python程序,将无法确认具体程序是否在运行。AI总是说可以根据命令行窗口的标题来识别,其实并不可行。实际上批处理命令无法获取命令行窗口的标题,如下:

tasklist /FI "IMAGENAME eq cmd.exe" /FI "WINDOWTITLE eq test.bat"

网站公告

今日签到

点亮在社区的每一天
去签到