Лучший способ, который я нашел для этого, - настроить настраиваемый ресурс на узлах, которые вы хотите разрешить выполнение, а затем потребовать этот ресурс при отправке задания.
В qmon перейдите в «сложную» конфигурацию и добавьте новый атрибут. Задайте имя как «my_allowed» и ярлык на что-то вроде «m_a», тип BOOL, отношение к ==, запрос на «Да», расходный материал «Нет» и «Добавить». Зафиксируйте свои изменения в сложных конфигурациях.
Следующий шаг, вероятно, проще сделать из командной строки, но вы можете сделать это и в qmon. Вам нужно добавить свои расходные материалы на каждый хост, чтобы вы могли выполнять свою работу. В qmon вы можете перейти к конфигурации хоста, выбрать хост выполнения и открыть поочередно каждый хост, щелкнув вкладку расходных материалов/фиксированных атрибутов и добавить новый комплекс, который вы только что сконфигурировали выше, с «True» в качестве значения. Из командной строки вы можете получить список хостов выполнения с помощью «qconf -sel». Этот список подходит для перехода в цикл и grepping из хоста (ов), который вы не хотите включать. Сделайте что-то вроде этого:
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
Это позволяет программно редактировать хост (как правило, не допускается qconf, как он хочет начать свой редактор для вас). Он делает это, устанавливая редактор в «ed» (вам нужно убедиться, что у вас установлен редактор ed ... попробуйте запустить его вручную сначала ... введите «q», чтобы выйти). ed принимает список команд редактирования на его stdin, поэтому мы даем ему три команды. Первый редактирует строку с complex_values на ней, чтобы включить значение my_test. Второй выписывает временный файл, а третий - редактирует.
После того, как вы сделали это, представить свои работы с предельным параметром, который требует вашего нового комплекса:
qsub -q whatever -l my_test=True my_prog.sh
Опция -l устанавливает ограничение и my_test = True говорит задание может работать только на хосты, которые имеют сложный my_test со значением True. Поскольку комплекс не расходуется, он все равно может выполнять столько заданий на каждом хосте, сколько захочет (до предела слота для хостов), но он избежит любых хостов, у которых не установлен комплекс my_test, равный True ,
Это взлом, но единственное решение, которое работает для меня (+1). Я пробовал дюжину вариантов qsub, но они либо не имеют никакого значения, либо приводят к ошибке .... – DaveFar