我有一些批处理文件需要按照以下顺序在位于同一网络上的6个远程服务器上异步运行,并且所有服务器都具有通用用户名&密码登录。我在Server5上放了 Master.bat 文件。
STEP1 :Run file1.bat on 4 different servers (Server1, Server2, Server3, Server4) in parallel
STEP2 :Run file2.bat on 2 different servers (Server5, Server6) in parallel
STEP3 :Run file3.bat on Server5 (which is local server in my case as Master.bat is on Server5 only )
STEP4 :Run file4.bat on 2 same servers as in STEP2 (Server5, Server6) in parallel
STEP5 :Run file5.bat on 4 same servers as in STEP1 (Server1, Server2, Server3, Server4) in parallel
我计划如下:
Serverlist1.txt:
Server1 ip
Server2 ip
Server3 ip
Server4 ip
Serverlist2.txt:
Server5 ip
Server6 ip
Master.bat:
@echo off
setlocal enabledelayedexpansion
for /F "delims= " %i in (C:\test\Serverlist1.txt) do ( psexec \\%i C:\test\file1.bat )
for /F "delims= " %i in (C:\test\Serverlist2.txt) do ( psexec \\%i C:\test\file2.bat )
call file3.bat
for /F "delims= " %i in (C:\test\Serverlist2.txt) do ( psexec \\%i C:\test\file4.bat )
for /F "delims= " %i in (C:\test\Serverlist1.txt) do ( psexec \\%i C:\test\file5.bat )
我还没有测试过,所以不确定 Master.bat 文件中的多个 FOR 循环是否会等待彼此完成?我应该将这些 FOR 循环放在其他批处理文件中吗? CALL 将它们放在 Master.bat 中? 这对我来说似乎有点冗长。有没有简单的方法来做到这一点? 需要帮助!
EDIT1
file1.bat
taskkill /f /im firefox.exe
net stop W3SVC
sc config W3SVC start= demand
net start W3SVC
我希望file1.bat等到收到“SUCCESS”信号。我应该在file1.bat文件中放置waitfor SUCCESS
命令吗?
在上面的 Master.bat 文件中,我应该插入waitfor /SI SUCCESS
命令向 file1.bat 发送信号以开始运行?
实际上我必须为所有五个批处理文件定义不同的信号名称,我可以按照上面提到的5个步骤一个接一个地运行它们。
答案 0 :(得分:0)
一个。一种选择是连续运行每个服务器上的所有commans:例如:Server1上的bat1,S2,S3,S4,S5上的bat2,S6等等
湾如果选项a。不适合你,我没有看到一个简单的解决方案:
tasklist /FI ...
命令按名称和窗口名称过滤进程,并关闭子窗口。检查之间的等待可以通过 ping 命令“ping localhost>nul
”进行模拟。它将持续约3秒。