标题: [系统相关] 实时监控服务的批处理脚本,哪儿出错了? 更正 [打印本页]
作者: polarant 时间: 2012-1-23 17:16 标题: 实时监控服务的批处理脚本,哪儿出错了? 更正
本帖最后由 polarant 于 2012-1-29 08:48 编辑
我不懂脚本,这个脚本是网上找的,高人帮忙看看。。我试了一下,第一个批处理就不成功,不知道哪儿写的不对。貌似if语句不工作。。。
我的目标: 实时监控服务的状态,如果进程stop,把进程start起来。- sc query spooler | find "STATE" >c:\servstat.txt
- set myServStat=-1
- for /f "tokens=2,3*" %%a in (c:\servstat.txt) do set myServStat=%%c
- [color=Red]if "%myServStat%"=="STOPPED" goto startserv[/color]
- [color=Red]goto ss[/color]
-
- :Startserv
- net start spooler
- echo bye
- :ss
- echo good bye
复制代码
-----------------
上面的批处理把spooler改成你需要的服务名,或者以%1代替来使用参数,但运行过程会有黑框出现,这可以用VBS来解决。比如上面的批处理保存为c:\chkserv.bat,这个的VBS就行了:- 'VBS脚本,定时运行一下c:\chkserv.bat
- batfile="c:\chkserv.bat"
- do while true
- set o=createobject("WScript.Shell")
- '下面第二个参数为0即隐藏运行窗口,1显显示运行窗口
- '测试时可先以1为参数看运行情况
- o.run batfile,0
- set o=nothing
- WScript.Sleep 10*60*60 '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 编辑
监视进程的- @echo off
- :loop
- ping /n 5 127.1 >nul
- tasklist | find "进程名.exe" &&goto loop || goto begin
- :begin
- start "" "进程启动路径"
- goto :loop
复制代码
作者: 1094454852 时间: 2012-1-27 13:34
- @echo off
- echo.
- echo. 进程监测 高级
- echo.
- echo.
- set /p jc=需要监控的进程:
- echo.
- set /p sj=自动循环(秒):
- echo.
- set /p cml=进程存在(DOS命令[可为空]):
- echo.
- set /p ml=进程不存在(DOS命令):
- echo.
- :main
- tasklist /nh|find /i "%jc%.exe"
- if errorlevel 1 goto bcz else goto cz
- :cz
- echo.%jc%.EXE进程存在! -- %sj%秒后继续监控
- echo.
- %cml%
- ping -n %sj% 127.0.0.1 >nul
- goto main
- :bcz
- echo.%jc%.EXE进程不存在! -- 进程不存在3秒后将执行该命令
- ping -n 3 127.0.0.1 >nul
- %ml%
- echo.
- goto main
- 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)是监控服务状态。
- @echo off
- :loop
- start iexplore.exe
- 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 |