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 .
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