Bash
呼叫多個 bash 腳本並並行執行它們,而不是按順序執行
假設我有三個(或更多)bash 腳本:
script1.sh
、script2.sh
和script3.sh
. 我想呼叫所有這三個腳本並並行執行它們。一種方法是只執行以下命令:nohup bash script1.sh & nohup bash script2.sh & nohup bash script3.sh &
(一般來說,腳本可能需要幾個小時或幾天才能完成,所以我想使用
nohup
它們以便即使我的控制台關閉它們也能繼續執行。)但是,有沒有辦法在一次呼叫中並行執行這三個**命令?
我在想類似的東西
nohup bash script{1..3}.sh &
但這似乎按順序執行
script1.sh
,script2.sh
而不是並行執行。script3.sh
for((i=1;i<100;i++)); do nohup bash script${i}.sh & done
更好的方法是使用GNU Parallel。GNU 並行很簡單,使用它我們可以控制並行執行的作業數量,並對作業進行更多控制。
在下面的命令中,
script{1..3}.sh
被擴展並作為參數bash
並行發送。這裡-j0
表示應該執行盡可能多的作業。預設情況下parallel
,為一個 cpu 核心執行一項作業。$ parallel -j0 bash :::: <(ls script{1..3}.sh)
你也可以嘗試使用
$ parallel -j0 bash ::: script{1..3}.sh
在執行第二種方法時,如果您收到任何錯誤消息,則表示該
--tollef
選項已設置/etc/parallel/config
,需要刪除,一切都會正常工作。您可以在此處閱讀
GNU Parallels
手冊頁以獲得更豐富的選項。如果您正在從遠端電腦執行作業,請更好地使用
screen
,以免會話因網路問題而關閉。nohup
沒有必要,因為最新版本的 bash 與huponexit
as一起提供off
,這將阻止父 shellHUP
在退出期間向其子 shell 發送信號。如果它沒有取消,請使用$ shopt -u huponexit