[英]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.