Batch file 在不同的远程服务器上按特定顺序运行多个批处理文件
我有一些批处理文件,需要在位于同一网络上的6台远程服务器上按以下顺序异步运行,所有服务器都有通用的用户名和密码登录。我已将Master.bat文件放在服务器5上Batch file 在不同的远程服务器上按特定顺序运行多个批处理文件,batch-file,for-loop,windows-server-2008,remote-access,Batch File,For Loop,Windows Server 2008,Remote Access,我有一些批处理文件,需要在位于同一网络上的6台远程服务器上按以下顺序异步运行,所有服务器都有通用的用户名和密码登录。我已将Master.bat文件放在服务器5上 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
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
Server5 ip
Server6 ip
@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 )
Serverlist2.txt:
Server1 ip
Server2 ip
Server3 ip
Server4 ip
Server5 ip
Server6 ip
@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:
Server1 ip
Server2 ip
Server3 ip
Server4 ip
Server5 ip
Server6 ip
@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循环放在其他批处理文件中,然后在Master.bat中调用它们?
这对我来说似乎有点冗长。有什么简单的方法可以做到这一点吗?
需要帮助
EDIT1
file1.bat
taskkill /f /im firefox.exe
net stop W3SVC
sc config W3SVC start= demand
net start W3SVC
我想让file1.bat等到收到“SUCCESS”信号。我应该把waitforsuccess
命令放在file1.bat文件的哪里
在上面的Master.bat文件中,我应该在其中插入waitfor/SI SUCCESS
命令,以向file1.bat发送开始运行的信号
实际上,我必须为所有五个批处理文件定义不同的信号名称,以便我可以按照上面提到的5个步骤一个接一个地运行它们。a。一个选项是在每台服务器上依次运行所有命令:例如:服务器1上的bat1、S2、S3、S4、S5上的bat2、S6等 b。如果选择a。不适合您,我看不到简单的解决方案:
tasklist/FI…
命令按名称和窗口名称筛选进程,并关闭子窗口。检查之间的等待可以通过ping命令“pinglocalhost>nul
”来模拟。它将持续约3秒启动需要并行运行的批处理文件,在这些批处理中,使用waitfor命令等待启动信号,并从master send signal开始等待batchs.MC..但是我可以通过PSExec直接调用Start,比如<代码>对于/F“delims=“%i in(C:\test\list1.txt)do(psexec\\%i start C:\test\file1.bat)?…和MC,另外,我不知道如何为同一域上的一组服务器实现
waitfor
延迟。是否在批处理文件waitfor SUCCESS
和主文件waitfor/s Server5/si SUCCESS
中都可以完成这项工作?我不清楚根据您的建议,waitfor
在我的情况下如何工作?是的,您可以使用psexec,这是一个不错的选择,但是master现在将等待批处理结束,或者将等待,直到一个批处理完成,其他批处理将不会开始。等待?使用psexec启动远程批处理,在这些批处理文件中,使用waitfor等待master发送开始工作的信号。因此,所有批处理文件都同时启动。如果您在waitfor中不使用/S,信号将通过domain.MC.发送。正如您上面所解释的。似乎我不需要在waitfor中使用/S时维护Serverlist1.txt和Serverlist2.txt。。。?如果信号是通过公共域发送的,那么这些服务器将自动识别启动的成功信号..?Mihai..感谢您的回复..但是选项b似乎使其更加复杂。