[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[系统相关] 实时监控服务的批处理脚本,哪儿出错了? 更正

本帖最后由 polarant 于 2012-1-29 08:48 编辑

我不懂脚本,这个脚本是网上找的,高人帮忙看看。。我试了一下,第一个批处理就不成功,不知道哪儿写的不对。貌似if语句不工作。。。

我的目标: 实时监控服务的状态,如果进程stop,把进程start起来。
  1. sc query spooler | find "STATE" >c:\servstat.txt
  2. set myServStat=-1
  3. for /f "tokens=2,3*" %%a in (c:\servstat.txt) do set myServStat=%%c
  4. [color=Red]if "%myServStat%"=="STOPPED" goto startserv[/color]
  5. [color=Red]goto ss[/color]
  6. :Startserv
  7. net start spooler
  8. echo bye
  9. :ss
  10. echo good bye
复制代码
-----------------

上面的批处理把spooler改成你需要的服务名,或者以%1代替来使用参数,但运行过程会有黑框出现,这可以用VBS来解决。比如上面的批处理保存为c:\chkserv.bat,这个的VBS就行了:
  1. 'VBS脚本,定时运行一下c:\chkserv.bat
  2. batfile="c:\chkserv.bat"
  3. do while true
  4.     set o=createobject("WScript.Shell")
  5.     '下面第二个参数为0即隐藏运行窗口,1显显示运行窗口
  6.     '测试时可先以1为参数看运行情况
  7.     o.run batfile,0
  8.     set o=nothing
  9.    WScript.Sleep 10*60*60 '10分钟后再检测
  10. loop
复制代码

第一批处理哪里不成功?

TOP

监控进程跟监控服务是不一样的,监控进程一般用tasklist命令吧

TOP

本帖最后由 sky02 于 2012-1-23 20:38 编辑

监视进程的
  1. @echo off
  2. :loop
  3. ping /n 5 127.1 >nul
  4. tasklist | find "进程名.exe" &&goto loop || goto begin
  5. :begin
  6. start "" "进程启动路径"
  7. goto :loop
复制代码

TOP

  1. @echo off
  2. echo.
  3. echo.                                进程监测    高级
  4. echo.
  5. echo.
  6. set /p jc=需要监控的进程:
  7. echo.
  8. set /p sj=自动循环(秒):
  9. echo.
  10. set /p cml=进程存在(DOS命令[可为空]):
  11. echo.
  12. set /p ml=进程不存在(DOS命令):
  13. echo.
  14. :main
  15. tasklist /nh|find /i "%jc%.exe"
  16. if errorlevel 1 goto bcz else goto cz
  17. :cz
  18. echo.%jc%.EXE进程存在!                                          -- %sj%秒后继续监控
  19. echo.
  20. %cml%
  21. ping -n %sj% 127.0.0.1 >nul
  22. goto main
  23. :bcz
  24. echo.%jc%.EXE进程不存在!                           -- 进程不存在3秒后将执行该命令
  25. ping -n 3 127.0.0.1 >nul
  26. %ml%
  27. echo.
  28. goto main
  29. pause
复制代码

TOP

回复 2# find


   
不管怎样,startsv都不会运行,貌似goto不work
如果进程是stopped的,它不去执行startsv

TOP

回复 3# sky02


    是监控服务。。。

TOP

回复 6# polarant


你把服务停掉之后检查一下变量%myServStat%的值是什么

TOP

本帖最后由 cjiabing 于 2012-1-27 17:24 编辑

回复 5# 1094454852
靠,文不对题!~
你题目说的是监控进程,实际上你举的例子(sc)是监控服务状态。
  1. @echo off
  2. :loop
  3. start iexplore.exe
  4. goto loop
复制代码

    http://www.bathome.net/thread-11052-1-1.html
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

回复 7# polarant


为啥顶楼说是监控进程呢?

TOP

更正过了,是监控服务。。。。好像是if语句不工作。,,啥原因。。。高人啊。。

TOP

回复 11# polarant

这样不行么?

TOP

回复 1# polarant


   注意看文本用sc查询状态时候这个参数%myServStat%到底长啥样???


if "%myServStat%"=="STOPPED"
还是
if "%myServStat%"=="STOPPED "


这个问题如果你不用sc命令 就不会想到的。
另: sc find 可以直接放到fot 避免临时文件

TOP

回复 12# lxzzr


    试过了,不行

TOP

回复 13# bluewing009


    跪拜!!!!!!!!!!!!!!1高人啊!!!!!!!!!解决了。。。。。

TOP

返回列表