我想要一个shell脚本,它配置几个东西,然后调用另外两个shell脚本。我希望这两个脚本并行运行,我希望能够获取并打印它们的实时输出。 这是我的第一个调用另外两个
的脚本#!/bin/bash
#CONFIGURE SOME STUFF
$path/instance2_commands.sh
$path/instance1_commands.sh
这两个过程尝试部署两个不同的应用程序,每个过程大约需要5分钟,因此我想并行运行它们并查看它们的实时输出,因此我知道它们在部署任务中的位置。这可能吗?
答案 0 :(得分:6)
并行运行两个脚本可能如下所示:
#!/bin/bash
#CONFIGURE SOME STUFF
$path/instance2_commands.sh >instance2.out 2>&1 &
$path/instance1_commands.sh >instance1.out 2>&1 &
wait
注意:
wait
暂停,直到孩子instance1
和instance2
完成2>&1
将错误消息重定向到相关的输出文件&
导致主脚本在分叉后继续运行,从而产生一个与主脚本的其余部分同时执行该脚本行的子代less instance1.out
但输出可能会卡在缓冲区而不是最新。要解决这个问题,程序必须以行缓冲或非缓冲模式打开stdout。您还可以使用-f
或>
来刷新显示。示例D 提供了一个类似的shell脚本,用于计算所有内核上Pi的序列总和,给定一个用于计算一个内核上的和的C程序。这有点超出了问题的范围,但我提到它以防你希望看到更深层的例子。
答案 1 :(得分:1)
很有可能,将脚本更改为:
#!/bin/bash
#CONFIGURE SOME STUFF
$path/instance2_commands.sh >> script.log
$path/instance1_commands.sh >> script.log
它们都将输出到同一个文件,您可以通过运行以下来查看该文件:
tail -f script.log
如果您愿意,可以根据需要输出2个不同的文件。只需将每个输出更改为输出(>>)到第二个文件名。
答案 2 :(得分:0)
这是我最后使用Paul指令编写的。
source $path/instance2_commands.sh >instance2.out 2>&1 &
source $path/instance1_commands.sh >instance1.out 2>&1 &
tail -q -f instance1.out -f instance2.out --pid $!
wait
sudo rm instance1.out
sudo rm instance2.out
我在两个进程中的日志不同,所以我不在乎是不是所有的都在一起,这就是我将它们全部放在一个文件中的原因。