我怎么能脚本一个蝙蝠或cmd停止和启动一个服务可靠的错误检查(或让我知道它不成功的原因)?
当前回答
我没有发现上面的答案提供了一个令人满意的解决方案,所以我写了下面的批处理脚本…
:loop
net stop tomcat8
sc query tomcat8 | find "STOPPED"
if errorlevel 1 (
timeout 1
goto loop
)
:loop2
net start tomcat8
sc query tomcat8 | find "RUNNING"
if errorlevel 1 (
timeout 1
goto loop2
)
它一直运行net stop直到服务状态为STOPPED,只有在状态为STOPPED后才运行net start。如果一个服务需要很长时间才能停止,网络停止可能会终止失败。如果由于某种原因,服务没有成功启动,它将继续尝试启动服务,直到状态为RUNNING。
其他回答
SC 净停止/启动 PsService WMIC Powershell还有易于使用的选项
SC和NET已经作为答案给出了。PsService增加了一些简洁的功能,但需要从微软下载。
但我最喜欢的方式是WMIC,因为WQL语法提供了一种强大的方式,可以用一行管理多个服务(WMI对象也可以通过powershell/vbscript/jscript/c#使用)。
最简单的使用方法:
wmic service MyService call StartService
wmic service MyService call StopService
以及WQL的例子
wmic service where "name like '%%32Time%%' and ErrorControl='Normal'" call StartService
这将启动名称包含32Time并具有正常错误控制的所有服务。
这里有一些你可以使用的方法。
:
wmic service get /FORMAT:VALUE
您可以查看有关服务的可用信息。
我们愿意认为“网络停止”将停止服务。遗憾的是,现实并不是那么非黑即白。如果停止服务的时间较长,则该命令将在服务停止之前返回。但是,除非检查errorlevel,否则您不会知道。
解决方案似乎是循环查找服务的状态,直到停止,并在每次循环中暂停。
但话说回来……
我看到第一个服务需要很长时间才能停止,然后后续服务的“净停止”似乎什么也不做。在服务管理器中查看服务,它的状态仍然是“Started”—没有更改为“stopped”。然而,我可以使用SCM手动停止第二个服务,它将在3或4秒内停止。
我没有发现上面的答案提供了一个令人满意的解决方案,所以我写了下面的批处理脚本…
:loop
net stop tomcat8
sc query tomcat8 | find "STOPPED"
if errorlevel 1 (
timeout 1
goto loop
)
:loop2
net start tomcat8
sc query tomcat8 | find "RUNNING"
if errorlevel 1 (
timeout 1
goto loop2
)
它一直运行net stop直到服务状态为STOPPED,只有在状态为STOPPED后才运行net start。如果一个服务需要很长时间才能停止,网络停止可能会终止失败。如果由于某种原因,服务没有成功启动,它将继续尝试启动服务,直到状态为RUNNING。
对我来说,使用net start和net stop的返回代码似乎是最好的方法。试着看看这个:Net Start返回代码。
用它可以启动需要服务的服务或程序
@echo
taskkill /im service.exe /f
taskkill /im service.exe /f
set "reply=y"
set /p "reply=Restart service? [y|n]: "
if /i not "%reply%" == "y" goto :eof
cd "C:\Users\user\Desktop"
start service.lnk
sc start service
eof
exit
推荐文章
- 如何从终端/命令行调用VS代码编辑器
- 在Jar文件中运行类
- 我如何找到哪个程序正在使用端口80在Windows?
- 在Windows中有像GREP这样的模式匹配实用程序吗?
- 如何在Windows命令提示符下运行.sh ?
- 如何从命令行通过mysql运行一个查询?
- 如何从命令行在windows中找到mysql数据目录
- 如何从命令行安装cygwin组件?
- 如何更改Git日志日期格式
- 在没有事件源注册的情况下写入Windows应用程序事件日志
- Windows FINDSTR命令的未记录的特性和限制是什么?
- 无法在Windows上从/usr/local/ssl/openssl.cnf加载配置信息
- 使iTerm以与其他操作系统相同的方式翻译“元键”
- 用Windows任务调度器运行批处理文件
- GIT克隆在windows中跨本地文件系统回购