找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 33699|回复: 14

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

[复制链接]
发表于 2012-1-23 17:16:13 | 显示全部楼层 |阅读模式
本帖最后由 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
复制代码
发表于 2012-1-23 20:10:37 | 显示全部楼层
第一批处理哪里不成功?
发表于 2012-1-23 20:21:20 | 显示全部楼层
监控进程跟监控服务是不一样的,监控进程一般用tasklist命令吧
发表于 2012-1-23 20:36:29 | 显示全部楼层
本帖最后由 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
复制代码
发表于 2012-1-27 13:34:12 | 显示全部楼层
  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
复制代码
 楼主| 发表于 2012-1-27 15:46:21 | 显示全部楼层
回复 2# find


   
不管怎样,startsv都不会运行,貌似goto不work
如果进程是stopped的,它不去执行startsv
 楼主| 发表于 2012-1-27 15:49:47 | 显示全部楼层
回复 3# sky02


    是监控服务。。。
发表于 2012-1-27 17:20:05 | 显示全部楼层
回复 6# polarant


你把服务停掉之后检查一下变量%myServStat%的值是什么
发表于 2012-1-27 17:21:44 | 显示全部楼层
本帖最后由 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
发表于 2012-1-27 17:24:06 | 显示全部楼层
回复 7# polarant


为啥顶楼说是监控进程呢?
 楼主| 发表于 2012-1-29 08:49:22 | 显示全部楼层
更正过了,是监控服务。。。。好像是if语句不工作。,,啥原因。。。高人啊。。
发表于 2012-1-29 22:42:06 | 显示全部楼层
回复 11# polarant

这样不行么?
发表于 2012-1-29 23:53:21 | 显示全部楼层
回复 1# polarant


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


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


这个问题如果你不用sc命令 就不会想到的。
另: sc find 可以直接放到fot 避免临时文件
 楼主| 发表于 2012-1-30 16:37:24 | 显示全部楼层
回复 12# lxzzr


    试过了,不行
 楼主| 发表于 2012-1-30 16:39:51 | 显示全部楼层
回复 13# bluewing009


    跪拜!!!!!!!!!!!!!!1高人啊!!!!!!!!!解决了。。。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 15:23 , Processed in 0.014337 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表