簡體   English   中英

按順序運行作業而不是連續使用bash

[英]Run jobs in sequence rather than consecutively using bash

所以我在超級計算機上使用Gaussian 09(計算化學軟件)做了很多工作。

要提交作業,請使用以下命令行

 g09sub input.com -n 2 -m 4gb -t 200:00:00

其中n是使用的處理器數量,m是請求的內存,t是請求的時間。

我想知道是否有辦法編寫一個腳本,將提交文件夾中的前10個.com文件,然后在每個完成時提交另一個.com文件。

我有一個腳本可以同時提交文件夾中的所有.com文件,但是我可以在我使用的超級計算機上排隊的作業數量有限制。

當前的腳本看起來像

 #!/bin/bash 
 #SBATCH --partition=shared
 for i in *.com
        do g09sub $i -n 2 -m 4gb -t 200:00:00
 done

因此1.com,2.com,3.com等將同時提交。

我想要的是1.com,2.com,3.com,4.com,5.com,6.com,7.com,8.com,9.com和10.com都是從同一時間,然后每個完成另一個.com文件啟動。 這樣任何一個文件夾中的作業不會同時運行10個以上。

如果它有用,每個作業在完成時都會創建一個.log文件。

雖然我不確定它是否重要,但超級計算機使用PBS排隊系統。

嘗試xargs或GNU parallel

xargs

ls *.com | xargs -I {} g09sub -P 10 {} -n 2 -m 4gb -t 200:00:00

說明:

  • -I {}告訴{}代表輸入文件名
  • -P 10一次設置最大作業

parallel

ls *.com | parallel -P 10 g09sub {} -n 2 -m 4gb -t 200:00:00 # GNU parallel supports -P too
ls *.com | parallel --jobs 10 g09sub {} -n 2 -m 4gb -t 200:00:00

說明:

  • {}表示輸入文件名
  • --jobs 10一次設置最多工作

不確定超級計算機的可用性,但GNU bash手冊在底部提供了3.2.6 GNU Parallel下的parallel示例。

有一些方法可以並行運行未構建到Bash中的命令。 GNU Parallel是一個可以做到這一點的工具。

...

最后,Parallel可用於並行運行一系列shell命令,類似於'cat file | 慶典”。 獲取文件名列表,創建一系列shell命令以對其進行操作並將該命令列表提供給shell並不罕見。 並行可以加快速度。 假設該文件包含一個shell命令列表,每行一個,

parallel -j 10 < file

將使用shell評估命令(因為沒有提供顯式命令作為參數),一次只有10個shell作業塊。


在我無法使用該選項的情況下,使用jobs功能的工作相當粗糙。 例如:

for entry in *.com; do
   while [ $(jobs | wc -l) -gt 9 ]; do
     sleep 1    # this is in seconds; your sleep may support 'arbitrary floating point number'
   done
   g09sub ${entry} -n 2 -m 4gb -t 200:00:00 & 
done

$(jobs | wc -l)計算在后台生成的作業數${cmd} &

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM