Bri*_*ian 5 windows services batch command-line
我有一个批处理文件,它经常重新启动内部开发的一组服务。我们很快就会从这些转向更稳定的东西,但目前这些服务需要经常重启才能正常工作。
为了简化这一点,我有一个按计划运行的批处理文件。它看起来像这样:
@ECHO OFF
SETLOCAL EnableDelayedExpansion
ECHO ---------------------------------------------->> log.txt
ECHO -----------========================----------->> log.txt
ECHO -----------=========%date%=========----------->> log.txt
ECHO -----------========================----------->> log.txt
ECHO ---------------------------------------------->> log.txt
set DD=0
Set TIMESTAMP="eol=; tokens=1,2,3,4* delims=/, "
For /F %TIMESTAMP% %%i in ('DATE /t') DO (
SET YYYYMMDD=%%l%%j%%k
SET YYYYMM=%%l%%j
set DD=%%k
)
echo A >> ServiceNames
echo B >> ServiceNames
echo C >> ServiceNames
echo D >> ServiceNames
echo E >> ServiceNames
echo F >> ServiceNames
for /f %%a in (ServiceNames) do (
set timestamp=!date!!time!
ECHO !timestamp! - Stopping Service %%a >> log.txt
net stop /y srvService_%%a >> log.txt
taskkill /f /im Service_%%a.exe >> log.txt
ping localhost -n 15 > nul
set timestamp=!date!!time!
ECHO !timestamp! - Starting Service %%a >> log.txt
net start srvService_%%a >> log.txt
)
if exist ServiceNames del ServiceNames
Run Code Online (Sandbox Code Playgroud)
问题是,在某些情况下,批处理文件不会等待一项服务完全启动后再停止下一项服务。
您认为在 net start 命令之后添加一个额外的 ping localhost 命令会有所帮助吗?
您可以使用如下代码继续等待,直到服务(在本例中我使用w32time进行了测试)启动:
:WAIT
timeout /t 5 > NUL
for /f "tokens=4" %%s in ('sc query w32time ^| find "STATE"') do if NOT "%%s"=="RUNNING" goto WAIT
echo Service is now running!
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13318 次 |
| 最近记录: |