并行运行两个shell脚本并捕获它们的输出

D3G*_*GAN 2 linux shell

我想要一个shell脚本,它配置几个东西,然后调用另外两个shell脚本.我希望这两个脚本并行运行,我希望能够获取并打印它们的实时输出.这是我的第一个脚本,它调用另外两个

#!/bin/bash
#CONFIGURE SOME STUFF
$path/instance2_commands.sh 
$path/instance1_commands.sh
Run Code Online (Sandbox Code Playgroud)

这两个过程尝试部署两个不同的应用程序,每个过程大约花费5分钟,所以我想并行运行它们并看到它们的实时输出,所以我知道它们在部署任务中的位置.这可能吗?

Pau*_*aul 6

并行运行这两个脚本可能如下所示:

#!/bin/bash
#CONFIGURE SOME STUFF
$path/instance2_commands.sh >instance2.out 2>&1 &
$path/instance1_commands.sh >instance1.out 2>&1 &
wait
Run Code Online (Sandbox Code Playgroud)

笔记:

  • wait暂停,直到孩子们,instance1instance2完成
  • 2>&1 在每一行上将错误消息重定向到相关的输出文件
  • & 在行的末尾导致主脚本在分叉后继续运行,从而产生一个子代,该脚本与主脚本的其余部分同时执行该脚本行
  • 每个脚本应将其输出发送到单独的文件.将两个发送到同一文件将在视觉上混乱,并且当实例生成类似的输出消息时无法进行排序.
  • 您可以尝试在脚本与任何阅读器一起运行时读取输出文件,例如less instance1.out输出可能会卡在缓冲区中而不是最新的.要解决这个问题,程序必须以行缓冲或非缓冲模式打开stdout.您还可以使用-f>刷新显示.

来自Apache Spark和我博客上的并行处理文章中的示例D提供了类似的shell脚本,用于计算所有内核上的Pi系列的总和,给出了用于计算一个内核上的和的C程序.这有点超出了问题的范围,但我提到它以防你想看到更深层的例子.