Bash
用於執行順序作業的腳本
我最近開始學習使用 Linux。我想在 bash shell 中編寫一個腳本來在集群上執行串列作業。我一直在尋找有關如何編寫這樣一個腳本的提示和說明。我設法寫了以下內容:
#!/bin/bash #PBS -l nodes=1:ppn=8 #PBS -l walltime=1:00:00 #PBS -e test.err #PBS -o test.log cd /home/myuser/ echo "Running on host `hostname`" echo "Time is `date`" echo "Directory is `pwd`" /home/myuser/comsol4.3b/bin/comsol batch -inputfile DF.mph -outputfile output.mph -batchlog out.log
最後一行呼叫程序(稱為 COMSOL)執行。我的程式碼中缺少的一件事是命令“qsub”;我不知道如何將它與我的程式碼中的其餘命令合併。誰能指導我如何通過“qsub”命令修改呼叫我正在使用的程序的行?
抱歉,如果我的問題很簡單,我花了很多時間試圖讓它工作,但不幸的是我做不到。
編輯:總而言之,如果我只輸入程式碼的最後一行,它將只在主節點上執行,我不希望這樣。我想要的是修改程式碼的最後一行,以便它使用我使用 PBS 行分配給它的資源,我應該怎麼做?
作為記錄,該命令
qhost
顯示有 250 個節點,每個節點具有不同的核心,從 4 個核心/節點到 16 個核心/節點
您沒有具體說明您使用的是哪種集群軟體,但基於您所詢問的事實
qsub
,我知道 GridEngine(和衍生產品)以及 PBS 都使用該特定命令,所以讓我們從這些命令開始。我最熟悉 GridEngine(和衍生產品),因此要使用該包送出命令,您需要執行類似的操作。
例子
這是一個範例腳本,我們稱之為
sample.bash
.#!/bin/bash echo "Working directory is $PWD"
要送出此腳本,請執行以下操作:
$ qsub sample.bash
要針對集群中的特定節點,您需要包含一組節點獨有的屬性,以便 GridEngine 調度軟體可以選擇其中一個節點,並在其中一個節點上執行您的作業。