2012-12-13 15 views

risposta

-1

C'è un bel bypass per questo.

generare un semplice file bash:

#!/bin/bash 
sleep 6000 #replace 6000 with any long period of time that will be enough to submit your jobs 

Invia questo i lavori al nodo che si desidera escludere fino a quando non completamente occupano.

Wuala, il tuo nodo è escluso.

+0

Questo è un hack ma l'unica soluzione che funziona per me (+1). Ho provato una dozzina di varianti di qsub ma non fanno nessuna differenza o provocano un errore .... – DaveFar

2

Il modo migliore che ho trovato per questo è impostare una risorsa personalizzata sui nodi su cui si desidera consentire l'esecuzione, quindi richiedere quella risorsa quando si invia il lavoro.

In qmon, andare alla configurazione "complessa" e aggiungere un nuovo attributo. Imposta il nome su qualcosa come "my_allowed" e il collegamento a qualcosa come "m_a", il tipo a BOOL, la relazione a ==, richiesta a Sì, consumabile a No e "Aggiungi". Applica le tue modifiche alle configurazioni complesse.

Il passaggio successivo è probabilmente più semplice da eseguire dalla riga di comando, ma è possibile farlo anche in qmon. È necessario aggiungere il materiale di consumo a ciascun host su cui si intende consentire l'esecuzione del lavoro. In qmon, è possibile accedere alla configurazione host, selezionare l'host di esecuzione e aprire a turno ciascun host, facendo clic sulla scheda Materiali di consumo/attributi fissi e aggiungendo il nuovo complesso appena configurato sopra con "True" come valore. Dalla riga di comando, puoi ottenere un elenco dei tuoi host di esecuzione con "qconf -sel". Questa lista è adatta per passare ad un ciclo e scaricare l'host (s) che non si desidera includere. Fare qualcosa di simile:

qconf -sel | grep -v host_to_exclude | while read host; do 
    EDITOR="ed" qconf -me $h <<EOL 
/complex_values/s/$/,my_test=True/ 
w 
q 
EOL 
done 

Questo consente di modificare a livello di codice l'host (normalmente non consentita dal qconf come vuole per avviare il vostro editor per voi). Lo fa impostando l'editor su "ed" (dovrai assicurarti di avere installato l'editor edito ... prova ad eseguirlo manualmente prima ... digita "q" per uscire). ed prende la lista dei comandi di editing sul suo stdin, quindi gli diamo tre comandi. La prima modifica la linea con i valori_metali su di essa per includere il valore my_test. Il secondo scrive il file temporaneo e il terzo esce ed.

Una volta fatto questo, inviare i vostri lavori con un'opzione limite che richiede il vostro nuovo complesso:

qsub -q whatever -l my_test=True my_prog.sh 

L'opzione -l imposta un limite e la my_test = True dice che il lavoro può essere eseguito solo su host che hanno il complesso my_test con un valore di True. Poiché il complesso non è consumabile, può ancora eseguire quanti lavori su ciascun host come vuole (fino al limite dello slot per gli host), ma eviterà qualsiasi host che non ha il complesso my_test impostato su True .

15

Supponendo che non si desidera eseguirlo è chiamato n4 quindi aggiungendo il seguente script dovrebbe funzionare.

#$ -l h=!n4 
+2

Ottengo "qsub: submit error (Unknown resource type Resource_List.h)" – dranxo

+0

Grazie.Come puoi farlo a due nomi di host? '# $ -l h =! n4 h! = n5' o' # $ -l h! = n4, n5' non funziona – Arman

+0

h =! h4 &! h5 o h =! (h4 | h5) dovrebbe farlo. –

Problemi correlati