2013-04-05 14 views
6

Quando si inoltra uno script di lavoro a un sistema di accodamento PBS, viene specificato automaticamente un walltime o dall'utente, ad es. viaOttieni walltime in uno script di lavoro PBS

#PBS -l walltime=1:00:00 

La domanda è se è possibile accedere a questo orario dallo script del lavoro. C'è una variabile di ambiente o un altro modo per ottenere questo walltime.

Alla fine, lo script di lavoro dovrebbe decidere di volta in volta se c'è ancora abbastanza tempo per fare un po 'di lavoro in più affinché il lavoro non venga ucciso dal sistema di accodamento.

Aggiornamento:

Almeno se l'utente ha specificato il walltime nella lista delle risorse, posso proporre la seguente soluzione (che lavora per bash)

read _ _ PBS_WALLTIME <<< `qstat -f $PBS_JOBID | grep "Resource_List.walltime"` 

che analizza il walltime dal qstat output e inserisce il valore nella variabile PBS_WALLTIME. Di conseguenza, il comando

echo $PBS_WALLTIME 

si produrrà qualcosa come

1:00:00 
+0

In PBS 4.2.8 (e possibilmente in altre versioni), la variabile $ PBS_WALLTIME memorizza il tempo del muro in numero di secondi, quindi 'echo' restituirebbe' 3600' invece di '1: 00: 00'. – MasterHD

risposta

5

Questo è memorizzato nel $ PBS_WALLTIME variabile d'ambiente.

Ovviamente, questo è per TORQUE, non sono sicuro di quale sistema di accodamento PBS si sta utilizzando.

+0

Questo, ovviamente, dipende dal cluster che sto usando. Uno esegue TORQUE e l'altro PBS Pro. Sfortunatamente, anche nel cluster TORQUE la variabile $ PBS_WALLTIME non è definita. Quindi potrebbe non essere standard. – dastrobu

+0

Quale versione di TORQUE è? – dbeer

+0

Non sono sicuro, se posso rispondere correttamente a questa domanda. Come ottengo le informazioni sulla versione? Forse stai chiedendo la versione PBS impostata su 2.1.10 (prelevata dall'output del server di stampa 'qmgr -c" "). – dastrobu

1

Stavo cercando una risposta a questo e i commenti sopra mi hanno dato un'idea che sembra funzionare piuttosto bene. È possibile utilizzare qstat e afferrare le informazioni pertinenti da esso con sed:

qstat -f $PBS_JOBID | sed -rn 's/.*Resource_List.walltime = (.*)/\1/p' 

Mettendo questo nello script PBS stamperà il valore e si può usare bash standard per memorizzare l'output di questo in una variabile:

WALLTIME=$(qstat -f $PBS_JOBID | sed -rn 's/.*Resource_List.walltime = (.*)/\1/p') 

È anche possibile utilizzare questo per ottenere altre informazioni che non sono disponibili dalle variabili di ambiente PBS_ * come la quantità di memoria allocata per il lavoro e probabilmente altre cose.