如何获取任务A节点的IP /主机名并通过SLURM传递给任务B?

时间:2018-03-31 13:51:12

标签: cluster-computing slurm sbatch

我有一个(本土)集群网络基准测试,我正在尝试使用SLURM调度程序运行。该基准测试使用标准的客户端/服务器体系结构,该体系结构在启动时需要服务器IP地址(或主机名)参数。

通常我会编写一个服务器脚本来grep主要的nic的地址并将信息放在共享文件系统上,但是AFAIK不能在集群节点上工作。我也明白有一个SLURM_JOB_NODELIST env变量允许脚本从我的sbatch脚本中查看集群中所有节点的列表,但我不知道在这种情况下它是如何有用的。

如何确定调度程序选择哪个节点来运行基准测试服务器,并在启动之前/之后将该信息传递给客户端任务?

1 个答案:

答案 0 :(得分:0)

我无法相信在问之前我没有想到这一点。这比听起来容易,SLURM_JOB_NODELIST 的关键。您可以将该变量从sbatch脚本传递到第二个测试$(hostname)的shell脚本,并以两个主机名都已知的方式启动相应的可执行文件,如下所示:

name=$(echo $1 | cut -d '-' -f1 -)
node1=$(echo $1 | cut -d '-' -f2 - | tr -d '[')
node2=$(echo $1 | cut -d '-' -f3 - | tr -d ']')
if [ "$(hostname)" == "$name-$node1" ]; then
    server.exe
else
    client.exe $name-$node1
fi