[英]Run two shell script in parallel and capture their output
我想要一個shell腳本,它配置幾個東西,然后調用另外兩個shell腳本。 我希望這兩個腳本並行運行,我希望能夠獲取並打印它們的實時輸出。 這是我的第一個腳本,它調用另外兩個
#!/bin/bash
#CONFIGURE SOME STUFF
$path/instance2_commands.sh
$path/instance1_commands.sh
這兩個過程嘗試部署兩個不同的應用程序,每個過程大約花費5分鍾,所以我想並行運行它們並看到它們的實時輸出,所以我知道它們在部署任務中的位置。 這可能嗎?
並行運行這兩個腳本可能如下所示:
#!/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
或>
來刷新顯示。 來自Apache Spark和我博客上的並行處理的文章中的 示例D提供了類似的shell腳本,用於計算所有內核上的Pi系列的總和,給出了用於計算一個內核上的和的C程序。 這有點超出了問題的范圍,但我提到它,以防你想看到更深層的例子。
這很可能,將腳本更改為如下所示:
#!/bin/bash
#CONFIGURE SOME STUFF
$path/instance2_commands.sh >> script.log
$path/instance1_commands.sh >> script.log
它們都將輸出到同一個文件,您可以通過運行來查看該文件:
tail -f script.log
如果您願意,可以根據需要輸出2個不同的文件。 只需將每個ling更改為輸出(>>)到第二個文件名。
這就是我最后使用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
我在兩個進程中的日志不同,所以我不在乎是不是全部在一起,這就是我將它們全部放在一個文件中的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.