ZX0228 发表于 2024-5-3 11:41

批处理监测系统进程问题求助

求助在使用批处理监测 8个进程是否在运行过程中,在win7系统中运行时发现,petro-gsms-station-bus.exe petro-gsms-station-core.exe petro-gsms-station-iot.exe petro-gsms-station-monitor.exe petro-gsms-station-mysqld.exe这5给进程在在运行,但是监测结果却显示已停止运行。有没有大佬帮忙看看是什么原因? mysqld-nt.exeEPS.exeEPSServer.exe这三个进程状态监测就是正常的。@echo off
setlocal enabledelayedexpansion

set "processList=petro-gsms-station-bus.exepetro-gsms-station-core.exepetro-gsms-station-iot.exepetro-gsms-station-monitor.exepetro-gsms-station-mysqld.exemysqld-nt.exeEPS.exeEPSServer.exe "
set "separator=-----------------------------"

:monitorLoop
for %%p in (%processList%) do (
    echo(
    echo 检查 %%p...
    tasklist /nh /fi "imagename eq %%p" | find /i "%%p" > nul
    if !errorlevel! equ 0 (
      echo %%p 正常运行.
    ) else (
      echo %%p 已停止运行.
    )

)
    echo !separator!
timeout /t 30 /nobreak > nul
goto monitorLoop

:end
echo 批处理监控结束.
endlocal

一剑飘零 发表于 2024-5-3 12:56

本帖最后由 一剑飘零 于 2024-5-3 13:01 编辑

删除,我回答的错误的。

QvQsuipian 发表于 2024-5-3 15:13

在for循环中引用变量时,需要使用!而不是%来引用循环变量。对于errorlevel,不使用!,因为它是在执行tasklist和find命令后由系统直接设置的。
@echo off
setlocal

set "processList=petro-gsms-station-bus.exe petro-gsms-station-core.exe petro-gsms-station-iot.exe petro-gsms-station-monitor.exe petro-gsms-station-mysqld.exe mysqld-nt.exe EPS.exe EPSServer.exe"
set "separator=-----------------------------"

:monitorLoop
for %%p in (%processList%) do (
    echo(
    echo 检查 %%p...
    tasklist /nh /fi "imagename eq %%p" | find /i "%%p" > nul
    if %errorlevel% equ 0 (
      echo %%p 正常运行.
    ) else (
      echo %%p 已停止运行.
    )
)
echo %separator%
timeout /t 30 /nobreak > nul
goto monitorLoop

:end
echo 批处理监控结束.
endlocal
exit /b

ZX0228 发表于 2024-5-4 09:39

QvQsuipian 发表于 2024-5-3 15:13
在for循环中引用变量时,需要使用!而不是%来引用循环变量。对于errorlevel,不使用!,因为它是在执行taskli ...

还是不行,所有服务都是正常的,只有后三个显示正常运行,其余5个都显示已停止运行

QvQsuipian 发表于 2024-5-5 00:24

ZX0228 发表于 2024-5-4 09:39
还是不行,所有服务都是正常的,只有后三个显示正常运行,其余5个都显示已停止运行

在cmd里tasklist /v一下看看进程名称是否与你在脚本中列出的名称完全匹配{:301_995:}

ZX0228 发表于 2024-5-5 10:08

QvQsuipian 发表于 2024-5-5 00:24
在cmd里tasklist /v一下看看进程名称是否与你在脚本中列出的名称完全匹配

匹配的,现在不知道和操作系统有没有关系,在win10 运行的时候是正常的,在win7运行那几个名字比较长的进程状态就不准确了

QvQsuipian 发表于 2024-5-5 16:14

ZX0228 发表于 2024-5-5 10:08
匹配的,现在不知道和操作系统有没有关系,在win10 运行的时候是正常的,在win7运行那几个名字比较长的进 ...

用管理员身份运行看看

ZX0228 发表于 2024-5-5 17:28

QvQsuipian 发表于 2024-5-5 16:14
用管理员身份运行看看

也是过了,不行。

QvQsuipian 发表于 2024-5-5 18:25

ZX0228 发表于 2024-5-5 17:28
也是过了,不行。

权限没问题,进程名称也没问题,在win10能用,会不会是杀毒软件/防火墙干扰

你好,再见 发表于 2024-5-8 12:14

ZX0228 发表于 2024-5-5 10:08
匹配的,现在不知道和操作系统有没有关系,在win10 运行的时候是正常的,在win7运行那几个名字比较长的进 ...

进程名有没有隐藏字符呢,tasklist -v列出来的名称直接复制出来写到批处理里面
页: [1]
查看完整版本: 批处理监测系统进程问题求助