MasterHD 我知道你已经找到了答案,但我想我会以另一种方式分享
这段代码更长,但它有助于满足我的特定需求。我实际上使用 pbsnodes 命令。下面是我的代码片段。
@nodes_whole =`pbsnodes -av -s $server | grep "pcpus" `;
$nodes_count = ` pbsnodes -av -s $server | grep "pcpus" | wc -l `;
while($i < $nodes_count){
@cpu_present = split(/\s+/, $nodes_whole[$i]);
$cpu_whole_count += $cpu_present[3];
$i++;
}
我这样做是因为在我的脚本中我检查了诸如 cpus 的数量之类的东西,这取决于 cpus 可能是 4、8、16 的节点。此外,我有多个集群,它们总是在改变大小,我不想要脚本具有硬编码的特定集群或节点信息。主要是,我这样做是因为当用户提交作业时,我会检查他们可以使用多少资源。如果说他们想使用队列并请求 200 cpus 但在集群 A 上,他们的作业将排队,我的脚本可以告诉他们他们将排队但不会在集群 b 或 d 上。因此,他们可以选择在提交之前进行更改。
我还用它来检查节点是否关闭:
@nodes_down=`pbsnodes -l -s $server `;
我看到正在使用哪些资源:
@nodes_used=`pbsnodes -av -s $server | grep "resources_assigned.ncpus" `;
同样在一种情况下,我在等待硬件时有两个集群在一个头节点上运行。在这种情况下,我会检查节点分配给哪个集群,然后根据分配给该集群的节点进行计数。这样,所有用户看到的都是另一个集群,并以他们对任何其他集群的方式使用脚本。
我只是提到,因为我发现了很多有用的方法来使用 pbsnodes,并且它可以很好地满足我的特定需求。