如何编写监控服务自动启动的Batch脚本,实现net start输出写入日志?
Windows服务监控Batch脚本日志写入失败问题修复
原有脚本的核心问题
- 逻辑错位:前置判断用
net start | find /i "bits"检测BITS服务运行状态,但后续实际操作的是Print Spooler(打印池)服务,判断条件和操作目标完全不匹配 - 语法换行错误:
echo行被强制拆分换行,%0>>的重定向逻辑被打断,导致日志写入命令未生效 - 输出写入逻辑倒置:最后一行
Set /P var =< 日志路径是从日志文件读取内容写入变量,完全没有把net start spooler的执行输出写入日志的逻辑 - 变量赋值语法错误:
Set /P var =中变量名var后多余空格,实际生成的是名为var(带尾部空格)的无效变量,无法正常取值 - 缺少异常输出捕获:没有重定向命令的错误输出,即使执行报错也不会留下日志记录
修复后的可用脚本
@echo off :: 统一配置日志路径,避免重复编写出错 set "logPath=C:\Users\DivyaBhargavMuddu\Desktop\ServiceRestart.Log" :: 检测目标服务Print Spooler是否正在运行 net start | find /i "Print Spooler" if "%errorlevel%"=="1" ( :: 写入服务启动触发记录 echo Service "Print Spooler" starting at %time% on %date% by Script %0>>"%logPath%" :: 设置服务开机自启,执行输出和错误全部写入日志 sc config "spooler" start=auto >>"%logPath%" 2>&1 :: 写入net start命令执行结果,2>&1代表错误输出也同步写入日志 echo === net start 执行输出 === >>"%logPath%" net start spooler >>"%logPath%" 2>&1 echo ========================= >>"%logPath%" :: 追加空行分隔每次日志记录 echo. >>"%logPath%" )
如果需要监控BITS服务而非打印池服务,把代码中所有Print Spooler和spooler替换为BITS即可。
内容的提问来源于stack exchange,提问作者divya m
相关产品推荐
相关产品推荐

