标题: [系统相关] 批处理如何循环检查多个服务是否运行? [打印本页]
作者: 5i365 时间: 2022-2-16 10:19 标题: 批处理如何循环检查多个服务是否运行?
我想使用批处理检查系统当中的三个服务是否全部都在运行状态, 如果没运行就启动, 等5秒后, 再检查运行状态, 直到全部运行
自己写了部分代码, 遇到了点问题, 求高手能支招完善一下, 非常感谢!!
问题1: 红字部分我改成ser4 也会回显 ser1服务正在运行
问题2: 现在是在检查一个服务, 如何检查三个服务同时运行, 如果没运行就启动?
@echo off
set ser1="ser1"
set ser2="ser2"
set ser3="ser3"
:label1
sc query %ser1%| find "RUNNING" >nul 2>&1 && set running=true
if defined running (echo ser1服务正在运行 ) else (
echo net start %ser1%
choice /t 5 /d y /n >nul
goto :label1
)
pause
作者: 5i365 时间: 2022-2-16 10:30
找了段PS的代码, 可以启用服务, 但是如何像批处理一样, 加标签循环检查呢? 搜索了一下, ps居然没有 goto 和 lable 命令
Function startService()
{
$args | Foreach {
Get-Service -Name $_ |
where Status -NE Running |
Start-Service
}
}
startService "ser1" "ser2" "ser3"
作者: Batcher 时间: 2022-2-16 10:30
回复 1# 5i365
思路1:不做任何判断,直接启动服务,反正对于已经启动的服务也没啥影响。- @echo off
- net start "ser1"
- net start "ser2"
- net start "ser3"
复制代码
作者: 5i365 时间: 2022-2-16 10:32
回复 3# Batcher
感谢大侠支招, 有时服务不能启动似的, 要再次启动才行
作者: Batcher 时间: 2022-2-16 10:35
回复 1# 5i365
思路2:
定义一个变量 RunningCount 初始值是0
对于每一个服务用 sc + find 判断状态之后,如果是运行状态,那么 set /a RunningCount+=1
最后判断RunningCount的值是不是3就能知道是否三个服务全都是运行状态
作者: Batcher 时间: 2022-2-16 10:46
回复 4# 5i365
这种情况也不需要自己用循环来再次启动,可以在 services.msc 里面把服务的恢复设置从默认的“不操作”改为“重新启动服务”
作者: thp2008 时间: 2022-2-16 14:58
我有个现成的,差不多的,你稍微修改一下就可以用了,我是监控它在运行就自动停止。你反过来就好了。- @echo off&setlocal enabledelayedexpansion
- %1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
- :start
- cls
- for /f "skip=3 tokens=4" %%i in ('sc query XLServicePlatform') do set "zt=%%i" &goto :next
- :next
- if /i "%zt%"=="RUNNING" (sc stop XLServicePlatform )
- echo.
- if /i "%zt%"=="STOPPED" (echo XLServicePlatform 服务目前是停止状态,没有运行)
-
- for /f "skip=3 tokens=4" %%i in ('sc query TbtHostControllerService') do set "zt=%%i" &goto :next
- :next
- if /i "%zt%"=="RUNNING" (sc stop TbtHostControllerService )
- echo.
- if /i "%zt%"=="STOPPED" (echo TbtHostControllerService 服务目前是停止状态,没有运行)
-
- for /f "skip=3 tokens=4" %%i in ('sc query TbtP2pShortcutService') do set "zt=%%i" &goto :next
- :next
- if /i "%zt%"=="RUNNING" (sc stop TbtP2pShortcutService )
- echo.
- if /i "%zt%"=="STOPPED" (echo TbtP2pShortcutService 服务目前是停止状态,没有运行)
- echo.
- echo.
- echo 倒计时30秒后,将重新检测!
- echo.
- TIMEOUT /T 30 /NOBREAK
- goto start
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |