à l'exclusion des nœuds de la commande qsub sous sge

j'ai plus de 200 emplois dont j'ai besoin pour soumettre et sge cluster. Je vais les soumettre en deux questions. Une des questions a une machine à laquelle je ne veux pas soumettre de travail. Comment exclure cette machine? La seule chose que j'ai trouvé qui pourrait être utile est (en supposant que trois noeuds valides disponibles pour q1 et tous les noeuds disponibles pour q2 sont valides):

qsub -q q1.q@n1 q1.q@n2 q1.q@n3 q2.q
11
demandé sur Yotam 2012-12-13 17:48:54

3 réponses

en supposant que vous ne voulez pas l'exécuter sur est appelé n4 alors ajouter ce qui suit à votre script devrait fonctionner.

#$ -l h=!n4
18
répondu William Hay 2013-10-17 07:57:22

la meilleure façon que j'ai trouvée pour cela est de configurer une ressource personnalisée sur les noeuds sur lesquels vous voulez autoriser l'exécution, puis d'exiger cette ressource lorsque vous soumettez la tâche.

dans qmon, allez dans la configuration" complexe " et ajoutez un nouvel attribut. Définissez le nom à quelque chose comme "my_allowed" et le raccourci à quelque chose comme "m_a", le type à BOOL, la relation à ==, requestable à Yes, consumable à No, et "Add" it. Enregistrer vos modifications dans les configurations complexes.

La prochaine étape est probablement plus facile à faire à partir de la ligne de commande, mais vous pouvez le faire en qmon. Vous devez ajouter vos consommables pour chaque hôte que vous allez permettre à votre travail à exécuter sur. Dans qmon, vous pouvez aller à la configuration hôte, sélectionner exécution hôte, et ouvrir chaque hôte à tour de rôle, en cliquant sur l'onglet consommables/attributs fixes et en ajoutant le nouveau complexe que vous venez de configurer avec "True" comme valeur. De la ligne de commande, vous pouvez obtenir une liste de votre l'exécution des hôtes avec "qconf -sel". Cette liste est adaptée pour passer à une boucle et grepping l'hôte(s) que vous ne voulez pas inclus. Faire quelque chose comme ceci:

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

cela vous permet d'éditer programmatiquement l'hôte (normalement non autorisé par qconf car il veut démarrer votre éditeur pour vous). Il le fait en paramétrant l'éditeur à "ed" (vous devrez vous assurer que vous avez l'éditeur ed installé... essayer de l'exécuter à la main d'abord... tapez "q" pour sortir). ed prend la liste des éditeurs les commandes sont stdin, donc on lui donne trois commandes. La première édite la ligne avec les valeurs complex_ pour y inclure la valeur my_test. Le deuxième écrit le dossier temporaire et le troisième démissionne.

une fois que vous avez fait ceci, soumettez vos travaux avec une option limit qui nécessite votre nouveau complexe:

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

l'option-l fixe une limite et my_test=True indique que le travail ne peut être exécuté que sur des machines qui ont la my_test complexe avec une valeur de True. Depuis le complexe n'est pas consommable, il peut toujours exécuter autant de travaux sur chaque hôte qu'il le souhaite (jusqu'à la limite de slot pour les hôtes), mais il évitera les hôtes qui n'ont pas le complexe my_test défini à True.

3
répondu jlp 2012-12-13 17:45:25

Il y a une belle contournement de à ce.

Générer un simple fichier bash:

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

envoyer cet emploi du nœud que vous souhaitez exclure jusqu'à ce qu'ils occupent.

Wuala, votre noeud est exclu.

-2
répondu Yotam 2012-12-13 15:23:49