我知道我問了同樣的問題早從這個鏈接:與不同節點上不同的輸入文件運行的可執行文件設置SGE(更新:有一些問題)
Setting SGE for running an executable with different input files on different nodes
就像我在跟帖說,我之前在SLURM系統上使用過這種類型的東西,沒有任何問題,因爲所有東西都被封裝在一個提交腳本中。但是,從上面的鏈接中的以前的問題適應,這裏是我對SGE的方法(我知道這是一個不好的做法,但我真的想不出有什麼更好的方法......)
作業被鏈接通過4個+ N腳本:run.sh
,submitSerial.sh
,wrap.sh
,temp.sh
和job{1-N}.sh
run.sh
:主要作業腳本
#!/bin/bash
...some stuffs...
...create N directories to run N input files in parallel (like last problems)
...generate wrap.sh and job{1-N}.sh...
...parameters definition...
for ((i=0; i<=M; i++))
do
...generate submitSerial.sh...
sh submitSerial.sh
...initialize boolean flag...
while flag
do
sh wrap.sh
...run an executable to determine the flag status...
done
done
...some cleanup...
submitSerial.sh
和temp.sh
:我需要先串行執行此可執行文件, 並且希望羣集等待,直到完成以繼續執行run.sh
中的下一個 過程行。由於run.sh
不在集羣 環境中(即沒有Grid Engine參數),而是僅在登錄節點中僅存在 ,因此這將生成temp.sh
並通過qsub立即運行串行腳本 。由於我不知道如何檢查是否完成了qsub工作,所以我不得不以愚蠢的方式來做。不知道是否有 更好的檢查方法?
#!/bin/bash
echo "#!/bin/bash" >> $workDir/temp.sh
echo >> $workDir/temp.sh
echo "#$ -N serialForce" >> $workDir/temp.sh
echo "#$ -q batch.q" >> $workDir/temp.sh
echo "#$ -l h_rt=0:10:00" >> $workDir/temp.sh
echo "#$ -pe orte 120" >> $workDir/temp.sh
echo "#$ -wd /path/to/working/dir/" >> $workDir/temp.sh
echo "#$ -j y" >> $workDir/temp.sh
echo "#$ -S /bin/bash" >> $workDir/temp.sh
echo "#$ -V" >> $workDir/temp.sh
echo >> $workDir/temp.sh
echo "mpirun -np 120 nwchem-6.5 $workDir/step0_1.nw" >> $workDir/temp.sh
qsub $workDir/temp.sh
while true
do
qstat > $workDir/temp
if [ -s $workDir/temp ]
then
sleep 1
else
rm $workDir/temp
break
fi
done
rm $workDir/temp.sh
wrap.sh
和job{1-N}.sh
:這早些時候在腳本的開始 產生。這是這是我的問題最後一次的一部分,我也 用睡眠來檢查的qsub狀態以及
#!/bin/bash
for i in {1..10}
do
qsub $workDir/wd$i/job$i.sh
done
while true
do
qstat > $workDir/temp
if [ -s $workDir/temp ]
then
sleep 1
else
rm $workDir/temp
break
fi
done
for j in {1..10}
do
rm $workDir/wd$j/*
done
這種方法的問題是,一旦我跑run.sh
,我不能這樣做在後臺並且必須單獨執行qsub
's時,如果羣集已滿,則存在潛在問題。我想知道是否有像SLURM方法那樣只有一個qsub
的解決方案?我只是想提交這份工作,只是等待完成,而不是讓腳本提交多個qsub作業,而不知道是否有未知的作業在中間死掉(我從來沒有想過它會死在哪裏)。
請幫我這個!非常感謝您的幫助!非常感謝您提前!
嗨文斯,其實我也探索了一些其他的可能性,也開始了一個新的線程。我的問題可以通過使用mpirun的應用上下文功能來解決,但我仍然遇到了一些問題,這在新線程中有描述。 http://stackoverflow.com/questions/29481433/mpirun-app-option-on-grid-engine-for-mpmd-settings 我也看過SGE陣列工作作爲一種可能的解決方案,但我陳述了一些該主題中的關注也是如此。你可能也請看看那個帖子呢?非常感謝您的幫助! – KhunWasut 2015-04-06 23:45:26
我實際上也在研究'qsub'的'-hold_jid'選項。它可能會解決我的問題,但我仍然擔心我正在運行的工作可能需要幾個小時或一天的時間,而且我正在處理的羣集不太可靠,並且某些「qsub」工作可能會卡住。至少當我使用SLURM時,所有東西都被包裝成一個提交,但看起來我必須做多個(可能是數千)提交才能完成同樣的問題。 – KhunWasut 2015-04-07 02:16:19
另一個值得關注的問題是,當我將一份工作提交給我的集羣時,有時它會被卡在'qw'裏很久,並且不會運行(不知道是什麼原因)。如果所有內容都在一次提交中,如果發生這種情況,我可以立即刪除該作業並開始一個新的作業。然而,如果這件事發生在我第543工作的時候,那麼這個工作就會陷入自動化腳本中而不能跟蹤它,這將會非常令人沮喪,並且時間會被浪費,而不會被重新做能夠首先攔截問題。你有任何解決方案可以幫助將所有內容都包裝到一個腳本中嗎? – KhunWasut 2015-04-07 02:19:28