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

Nodes 从sge下的qsub命令中排除节点,nodes,qsub,sungridengine,Nodes,Qsub,Sungridengine,我有200多个工作,我需要提交给和sge集群。我将把它们分为两个问题提交。其中一个问题有一台我不想提交作业的机器。我怎样才能排除那台机器?我发现唯一有用的是假设三个有效节点可用于q1,而所有可用节点可用于q2: qsub -q q1.q@n1 q1.q@n2 q1.q@n3 q2.q 有一个很好的旁路 生成一个简单的bash文件: #!/bin/bash sleep 6000 #replace 6000 with any long period of time that will be eno

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

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

有一个很好的旁路

生成一个简单的bash文件:

#!/bin/bash
sleep 6000 #replace 6000 with any long period of time that will be enough to submit your jobs
将此作业提交到要排除的节点,直到它们完全占用该节点


瞧,你的节点被排除了

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

在qmon中,转到复杂配置并添加新属性。将名称设置为my_allowed,快捷方式设置为m_a,类型设置为BOOL,关系设置为==,可请求设置为Yes,可消耗设置为No,然后添加它。将更改提交到复杂配置

下一步可能更容易从命令行执行,但也可以在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

l选项设置一个限制,my_test=True表示作业只能在具有值为True的复杂my_测试的主机上运行。由于复合体不是可消耗的,它仍然可以在每个主机上运行任意数量的作业,直到主机的插槽限制为止,但它将避免任何未将my_test复合体设置为True的主机。

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

#$ -l h=!n4

如果将-l选项添加到qsub命令行,而不是将其嵌入已提交的脚本中,则大多数Shell都需要引用感叹号。

I get qsub:submit error未知资源类型resource_List.hThanks。如何对两个主机名执行此操作?$-l h=!n4h=n5或$-l h=n4,n5不工作H=!h4&!h5或h=!h4 | h5应该能做到-l h='!对我来说是n4。这是一个黑客攻击,但唯一适合我+1的解决方案。我尝试了十几个qsub变体,但它们要么没有区别,要么导致错误……这是一个关于更大、共享集群的糟糕建议。
#$ -l h=!n4