【问题标题】:Start bash script with SSH使用 SSH 启动 bash 脚本
【发布时间】:2016-08-11 03:45:06
【问题描述】:

我使用 bash 脚本与其他机器建立 ssh 连接并执行脚本(存储在这些机器上)。

  1. SSH 到 master 以执行脚本 1
  2. SSH 到 master 以执行脚本 2
  3. SSH 到 master 以执行脚本 3
  4. SSH 到 node1 以执行脚本 1 等等。

现在我的问题是:在脚本 1(需要 30 秒)完成之前,是否会在主服务器上执行脚本 2?它们会同时运行吗?

【问题讨论】:

  • 与任何其他命令一样,ssh 会一直运行到完成,除非您专门在后台运行它。

标签: bash ssh


【解决方案1】:

这取决于您计算机上的 bash 脚本(与服务器建立 SSH 连接)以及这些服务器上的脚本如何工作。

例如:只要脚本 1、2 和 3 也是程序性的,并且在退出前不将工作分叉到后台(即所有工作在脚本退出时完成),以下命令是完全程序性的并且不并行化

ssh master 'script1' 
ssh master 'script2' 
ssh master 'script3' 

这可以简化为

ssh master 'script1; script2; script3' 

您可以通过将这些脚本分叉到后台来并行化工作,从而同时运行脚本 1、2 和 3。

ssh master 'script1 &; script2 &; script3 &' 

同样,只要确保您的脚本不会将工作分叉到后台并在工作完成之前退出

【讨论】:

    【解决方案2】:

    我只是在这里给出比@tripleee 更详细的答案...

    script1完成后会执行script2:

    ssh master script1
    ssh master script2
    

    你可以在一个连接中做同样的事情:

    ssh master 'script1 ; script2'
    

    如果你想让它们同时运行:

    ssh master 'script1 &; script2 &'
    

    引用manual

    如果命令被控制操作符& 终止,shell 会在子shell 的背景 中执行命令。

    有关于如何在一个连接中运行多个命令的帖子(如herehere)。

    【讨论】:

      【解决方案3】:

      这取决于。比较

      sleep 10
      date
      
      sleep 10 &
      date
      

      【讨论】:

        猜你喜欢
        • 2016-11-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-26
        • 1970-01-01
        • 2020-09-27
        • 2018-01-29
        • 2018-01-31
        相关资源
        最近更新 更多