挺你的問題的幾個方面都不清楚,比如,「使用myJobShellFile.sh到闕提交工作MyJob在currentDirectory所」,「追加此行 ‘mpiexec的./main輸入myJobDataFolder 0003’」的含義,工作完成時的檢測方式,myJobShellFile.sh
的相關部分以及其他一些細節。如果您可以列出您在作業提交的每次迭代中使用的特定shell命令,那麼您可以發佈一個更好的問題,使用bash
標記而不是python。
在下面的腳本中,我把###
放在任何一行的末尾,我猜測你在說什麼。以###
結尾的行可能與您實際執行的任何操作無關,也可能是僞代碼。無論如何,總的想法是,腳本應該做的事,你在你的項目中列出的東西1〜5這個腳本假定您已經修改myJobShellFile.sh
說
mpiexec ./main input $1 $2
而不是
mpiexec ./main input
因爲它更簡單使用參數來修改您告訴mpiexec
的內容,而不是修改shell腳本。另外,在我看來,您希望在提交下一個作業之前增加maxIter,而不是之後。如果是這樣,請從t=$((1$maxIter+1)); maxIter=${t#1}
行刪除#。請注意,請參閱${var#txt}
表單的man bash re擴展的「參數擴展」部分,以及$((expression))
格式的「算術擴展」部分。 1$maxIter
和類似的表格用於將0018
(這不是有效的bash數字,因爲8不是八進制數字)這樣的文本更改爲10018
。
#!/bin/sh
./myJobShellFile.sh MyJob ###
maxIter=0
while true; do
waitforjobcompletion ###
cd ./myJobDataFolder
maxFile= $(ls myJobData* | tail -1)
maxIter= ${maxFile#myJobData.} #Get max extension
# If you want to increment maxIter, uncomment next line
# t=$((1$maxIter+1)); maxIter=${t#1}
cd ..
if [[ 1$maxIter -lt 11000 ]] ; then
./myJobShellFile.sh MyJobDataFolder $maxIter
else
break
fi
done
注:(1)具有比1000次小的提交運行測試,取代11000 10000 + N; (2)在編寫上述腳本時,我假定輸出目錄中不時會出現未知的輸出文件數目。如果每次運行只顯示一個輸出文件,而您只想爲值0000,0001,0002,0999,1000每個值執行一次運行,則使用類似以下的腳本。 (對於具有超過1000更小數目的測試,代替1000用例如()0020的前導零在這些號碼告訴bash中與前導零填充生成的數字。)
#!/bin/sh
for iter in {0000..1000}; do
./myJobShellFile.sh MyJobDataFolder $iter
waitforjobcompletion ###
done
(3)如果系統有一個在超級計算資源上等待作業完成時休眠的命令,在上述腳本中使用該命令代替waitforjobcompletion
是合理的。否則,如果系統有一個命令jobisrunning
返回true,如果一個作業仍在運行,具有類似如下的替代waitforjobcompletion
:
while jobisrunning ; do sleep 15; done
這將運行jobisrunning命令;如果它返回true,那麼shell將會休眠15秒,然後重新測試。這裏是說明等待文件出現,然後就走開一個例子:
while [ ! -f abc ]; do sleep 3; echo no abc; done
while ls abc >/dev/null 2>&1; do sleep 3; echo an abc; done
第二行的測試可能是[ -f abc ]
代替;我展示了一個更長的示例來說明如何通過將它們路由到/ dev/null來抑制輸出和錯誤消息。 (4)要顛倒陳述測試的意義,請將while
替換爲until
。例如,while [ ! -f abc ]; ...
相當於until [ -f abc ]; ...
。
我認爲,對於作業控制,更多的人編寫bash腳本比python腳本。你在使用什麼操作系統?你知道如何寫下列哪一項? :python,bash,awk,perl –
@ jwpat7,我正在使用提交作業到超級計算資源。操作系統是Linux RedHat。我不知道python,awk或perl。我知道bash的基本知識,如cd,find等。我知道C++和Matlab,但我認爲這對我沒有幫助。 如果我能得到如何使用腳本編輯文件和搜索文件的一般想法,我想我可以找出其餘的。謝謝。 – namu