2016-11-29 48 views
0

我現在正在編寫一個包含一些qsub作業的shell腳本,並在工作節點中進行並行處理,然後總結統計信息將被彙總並寫入文件「temperature.txt」。但是,本地命令將在qsub登頂到節點之後立即執行。有沒有什麼像「wait [pid]」可以應用於qsub job id?如何在shell腳本中完成Grid Engine的qsub作業之後執行命令?

我的代碼看起來像下面:

echo "Burning..." 
var=0 
while [ $var -ne 1 ] 
do 
    qsub -hold_jid update -t 1-$1:1 -N mcmc_bn_$T -S /bin/sh -j y -cwd ./bn_mcmc.sh # Submit mcmc 
    qsub -hold_jid mcmc_bn_$T -N update update.sh $1 
    T=$(tail -n 1 ./temp/temperature.txt) 
    echo $T 
    var=$(awk 'BEGIN{ print "'$T'"<1}') # when $T<1 => $var=1 
    echo $var 
done 

提前感謝!

Rui

+0

我相當熟悉R和我沒有看到該標記的原因。 –

+0

@ 42-sorry爲此標籤。我的.sh腳本包含一些R腳本,我不加思索地添加它...... – RuyIBiostat

+0

使用'-e'結尾選項指定將在作業完成後運行的腳本。 –

回答

0

感謝大家參與討論。

我發現通過腳本從溶液:http://ccn.ucla.edu/wiki/index.php/How_to_have_a_script_wait_for_jobs_before_proceeding

基本他/她寫了一個腳本調用jobhold.sh檢查qstat每隔30s(可以指定)。代碼很簡單,如下:

#!/bin/bash 
# jobhold.sh 
# JB 8/2010 
# usage: 
#  jobhold.sh qsub <my_command> 
#  jobhold.sh q.sh <my_command> 
# For commands that are submitted to cluster, hold until jobs have completed 
shopt -s expand_aliases 
sleep_time=30 # seconds; don't make this too short! don't want to tax system with excessive qstat calls 
me=`whoami` 
alias myqstat='qstat | grep $me' 
stdout=`[email protected]` # call the command and capture the stdout 
id=`echo $stdout | awk -F' ' '{print $3}'` # get the jobid 
status=`myqstat | grep $id` # check to see if job is running 
while [ -n "$status" ] # while $status is not empty 
do 
    sleep $sleep_time 
status=`myqstat | grep $id` 
done 

通過將這個腳本的命令之前,未來,所有qsub完成工作後,他們將被運行。如果您有其他想法或更有效的解決方法,請繼續發帖。謝謝!

最佳,

相關問題