以特定顺序在不同远程服务器上运行多个批处理文件

时间:2013-11-13 18:27:35

标签: batch-file for-loop windows-server-2008 remote-access

我有一些批处理文件需要按照以下顺序在位于同一网络上的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个步骤一个接一个地运行它们。

1 个答案:

答案 0 :(得分:0)

一个。一种选择是连续运行每个服务器上的所有commans:例如:Server1上的bat1,S2,S3,S4,S5上的bat2,S6等等

湾如果选项a。不适合你,我没有看到一个简单的解决方案:

  1. 为每个步骤创建一个ServerlistX.txt文件(使用必要的服务器IP)。
  2. 设置Step = 0
  3. 第一步
  4. 致电所有服务器。
  5. 监控所有服务器批次是否成功完成。在这里,您可以设置特定的窗口名称,并使用tasklist /FI ...命令按名称和窗口名称过滤进程,并关闭子窗口。检查之间的等待可以通过 ping 命令“ping localhost>nul”进行模拟。它将持续约3秒。
  6. 设置步骤=步骤+ 1
  7. 检查步骤是否超过最大值,如果是,则退出。
  8. 转到第3步。