2016-07-28 38 views
2

Ich starte ein PBS-Skript, sobald andere abgeschlossen sind. Dazu benutze ich folgende Befehle:warten auf bereits abgeschlossene Jobs

$ job1=$(qsub job1.pbs) 
$ jobN=$(qsub jobN.pbs) 
$ qsub -W depend=afterok:$job1:$jobN join.pbs 

Dies funktioniert in den meisten Fällen. Wenn ich jedoch das Verbindungsskript ausführe, wenn Job1 und JobN bereits beendet sind, wird es auf unbestimmte Zeit inaktiviert, da es darauf wartet, dass die bereits fertig gestellten Jobs beendet werden. Das klingt wahnsinnig, aber genau das passiert. Wenn ich qstat laufen kann ich deutlich sehen, dass mein Verbindungs ​​Job gehalten wird (‚H‘)

$ qstat -u me 
Job ID   Username Queue Jobname SessID NDS TSK Memory Time S Time 
--------------- -------- -------- ---------- ------ --- --- ------ ----- - ----- 
1990613   me workq join.pbs  -- 1 1 -- -- H -- 

jedoch, wenn mindestens eine der Arbeitsplätze noch läuft, während der andere ist schon fertig, dann wird das Verbindungsskript geht nicht untätig und wird fertig sein.

Was also sind die Lösungen, um mit Jobs fertig zu werden, die bereits vorbei sind? Wir müssen diesen Job unbedingt erledigen.

+0

Wenn die Arbeitsplätze von 'qstat' weg sind, das heißt, Sie muss 'keep_completed' erhöhen. Wenn der Join-Job andernfalls ausgeführt werden kann, wird die Abhängigkeit niemals erfüllt und der Hold wird nie freigegeben. – clusterdude

+0

Welche Version von Torque verwenden Sie? Es könnte sein, dass Sie einen Fehler haben, der bereits behoben wurde. – dbeer

Antwort

0

Wenn der Join-Job gestartet wird, muss der Server immer noch über die abhängigen Jobs Bescheid wissen. Wenn einer von diesen von qstat gegangen ist, dann müssen Sie in qmgr erhöhen. Wenn der Join-Job andernfalls ausgeführt werden kann, wird die Abhängigkeit niemals erfüllt und der Hold wird nie freigegeben.

prüfen: $ qmgr -c 'print server keep_completed'

Hinzufügen/ändern: $ qmgr -c 'set server keep_completed=300'

(. Ich glaube, Sie auch keep_completed auf Warteschlangen einstellen)