从sge下的qsub命令中排除节点

时间:2012-12-13 13:48:55

标签: nodes qsub sungridengine

我需要提交200多个工作和sge集群。我将把它们提交给两个问题。其中一个问题是我不想提交工作的机器。我怎样才能排除那台机器?我发现的唯一可能有用的是(假设q1有三个有效节点,q2的所有可用节点都有效):

qsub -q q1.q@n1 q1.q@n2 q1.q@n3 q2.q

3 个答案:

答案 0 :(得分:18)

假设您不想运行它,则称为n4 将以下内容添加到脚本中应该可以正常工作。

#$ -l h=!n4

答案 1 :(得分:3)

我发现的最好方法是在要允许执行的节点上设置自定义资源,然后在提交作业时需要该资源。

在qmon中,转到“复杂”配置并添加新属性。将名称设置为“my_allowed”,快捷方式为“m_a”,类型为BOOL,关系为==,可请求为“是”,“消耗”为“否”,“添加”为“否”。提交您对复杂配置的更改。

下一步可能更容易从命令行执行,但您也可以在qmon中执行此操作。您需要将消耗品添加到您允许运行作业的每个主机上。在qmon中,您可以转到主机配置,选择执行主机,依次打开每个主机,单击耗材/固定属性选项卡,然后添加刚刚配置的新复合,并将“True”作为值。在命令行中,您可以使用“qconf -sel”获取执行主机的列表。此列表适合传递给循环并使用您不想包含的主机。做这样的事情:

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值。第二个写出临时文件,第三个退出ed。

完成此操作后,请使用需要新复合物的限制选项提交作业:

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

-l选项设置限制,my_test = True表示作业只能在复杂my_test的值为True的主机上运行。由于复合体不是可消耗的,它仍然可以在每个主机上运行尽可能多的作业(最多为主机的插槽限制),但它将避免任何没有将my_test复合体设置为True的主机

答案 2 :(得分:-3)

有一个很好的绕过这个。

生成一个简单的bash文件:

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

将此作业提交到您要排除的节点,直到它们完全占用它为止。

Wuala,您的节点是排除的。