Board logo

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

作者: polarant    时间: 2012-1-23 17:16     标题: 实时监控服务的批处理脚本,哪儿出错了? 更正

本帖最后由 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
复制代码

作者: find    时间: 2012-1-23 20:10

第一批处理哪里不成功?
作者: sky02    时间: 2012-1-23 20:21

监控进程跟监控服务是不一样的,监控进程一般用tasklist命令吧
作者: sky02    时间: 2012-1-23 20:36

本帖最后由 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
复制代码

作者: 1094454852    时间: 2012-1-27 13:34

  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
复制代码

作者: polarant    时间: 2012-1-27 15:46

回复 2# find


   
不管怎样,startsv都不会运行,貌似goto不work
如果进程是stopped的,它不去执行startsv
作者: polarant    时间: 2012-1-27 15:49

回复 3# sky02


    是监控服务。。。
作者: find    时间: 2012-1-27 17:20

回复 6# polarant


你把服务停掉之后检查一下变量%myServStat%的值是什么
作者: cjiabing    时间: 2012-1-27 17:21

本帖最后由 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
作者: find    时间: 2012-1-27 17:24

回复 7# polarant


为啥顶楼说是监控进程呢?
作者: polarant    时间: 2012-1-29 08:49

更正过了,是监控服务。。。。好像是if语句不工作。,,啥原因。。。高人啊。。
作者: lxzzr    时间: 2012-1-29 22:42

回复 11# polarant

这样不行么?
作者: bluewing009    时间: 2012-1-29 23:53

回复 1# polarant


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


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


这个问题如果你不用sc命令 就不会想到的。
另: sc find 可以直接放到fot 避免临时文件
作者: polarant    时间: 2012-1-30 16:37

回复 12# lxzzr


    试过了,不行
作者: polarant    时间: 2012-1-30 16:39

回复 13# bluewing009


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




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2