2016-11-29 35 views
0

Я сейчас пишу сценарий оболочки, включая некоторые задания qsub, параллельные в рабочих узлах, а затем сводную статистику суммируют и записывают в файл «temperature.txt». Тем не менее, локальная команда будет выполняться сразу после выполнения qsub выполнения задания на узлы. Есть ли что-нибудь вроде «wait [pid]», которое можно применить к id задания qsub?Как выполнить команды после выполнения 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 

Спасибо заранее!

Руи

+0

Я достаточно знаком с R, и я не вижу причин для этого тега. –

+0

@ 42-простите за этот тег. В моем сценарии .sh есть некоторый R-скрипт, я добавил его, не думая ... – RuyIBiostat

+0

Используйте опцию '-e' epilogue, чтобы указать скрипт, который будет запущен после завершения задания. –

ответ

0

спасибо всем профессиональней в этом обсуждении.

Я нашел решение через сценарий от: http://ccn.ucla.edu/wiki/index.php/How_to_have_a_script_wait_for_jobs_before_proceeding

Basic он/она написала вызов сценария 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 работы сделано. Пожалуйста, продолжайте отправлять сообщения, если у вас есть другие мысли или более эффективный способ решить эту проблему. Благодаря!

Бест,

Rui