代码之家  ›  专栏  ›  技术社区  ›  Čamo

如何从.bat文件运行多个服务

  •  0
  • Čamo  · 技术社区  · 3 年前

    我想从bat文件运行selenium服务器。它意味着启动集线器和集线器下的两个节点。在Ubuntu上,我有这样的脚本:

      java -jar $jarFilePath -role hub & 
      java -jar $jarFilePath -role node -hub http://173.249.58.30:4444/grid/register/ & 
      java -jar $jarFilePath -role node -hub http://173.249.58.30:4444/grid/register/ & 
      exit 0
    

    有必要将其与&因为第一个命令仍在运行,不会运行下一个命令。但在Windows上,由于某些原因,这不起作用。我为Win找到了这样的东西,但仍然没有成功。它打开了三个终端,但节点无法注册到集线器:

    start cmd.exe /k "cd c:\Program Files\Selenium\Server & java -jar selenium-server-standalone-3.141.59.jar -role hub"
    
    start cmd.exe /k "cd c:\Program Files\Selenium\Server & java -jar selenium-server-standalone-3.141.59.jar -role node -hub http://192.168.137.1:4444/grid/register/" 
    start cmd.exe /k "cd c:\Program Files\Selenium\Server & java -jar selenium-server-standalone-3.141.59.jar -role node -hub http://192.168.137.1:4444/grid/register/" 
    

    enter image description here

    谢谢你的帮助。

    0 回复  |  直到 3 年前
        1
  •  4
  •   dbenham    3 年前

    命令失败的原因是必须引用带空格的路径(空格是标记分隔符)。

    但以下操作仍然会失败,因为引号不能嵌套,所以 & 没有引用,初始批处理解析器将该行视为两个连接的命令,而不是单个命令 start 命令。

    例如,看第一行,这行不通

    start cmd.exe /k "cd "c:\Program Files\Selenium\Server" & java -jar selenium-server-standalone-3.141.59.jar -role hub"
    

    为了解决上述问题,许多人会逃离 &

    start cmd.exe /k "cd "c:\Program Files\Selenium\Server" ^& java -jar selenium-server-standalone-3.141.59.jar -role hub"
    

    但我更喜欢转义最外层的引号,这样我就可以像自己在命令提示符中键入命令一样编写命令

    start cmd.exe /k "cd ^"c:\Program Files\Selenium\Server" & java -jar selenium-server-standalone-3.141.59.jar -role hub^"
    

    请注意 cd 默认情况下不会更改活动驱动器。所以说你的主动驱动力是 D: ,则上述方法仍然无效。您必须使用其中之一 cd /d "c:\Program Files\Selenium\Server" ,否则 pushd "c:\Program Files\Selenium\Server" .

    但这可能更简单 cd /d pushd 在你之前 开始 命令,这样你只需要做一次。 START ed进程继承父进程的环境。

    服务终止后,子进程不需要保持打开状态,因此最好使用 cmd /c 而不是 cmd /k .

    你的完整剧本可能是

    @echo off
    pushd "c:\Program Files\Selenium\Server"
    start cmd.exe /c "java -jar selenium-server-standalone-3.141.59.jar -role hub"
    start cmd.exe /c "java -jar selenium-server-standalone-3.141.59.jar -role node -hub http://192.168.137.1:4444/grid/register/" 
    start cmd.exe /c "java -jar selenium-server-standalone-3.141.59.jar -role node -hub http://192.168.137.1:4444/grid/register/" 
    popd
    

    但我不确定你真的需要明确地运行 java 在内部 cmd.exe 。您可以简单地使用以下内容

    @echo off
    pushd "c:\Program Files\Selenium\Server"
    start java -jar selenium-server-standalone-3.141.59.jar -role hub
    start java -jar selenium-server-standalone-3.141.59.jar -role node -hub http://192.168.137.1:4444/grid/register/
    start java -jar selenium-server-standalone-3.141.59.jar -role node -hub http://192.168.137.1:4444/grid/register/
    popd
    

    最后,您可能不需要为每个进程单独设置一个窗口,在这种情况下,您可以添加 /B 选项到 开始 命令。把它放在后面 开始 .

    推荐文章