Cluster computing 如何获取任务A';s节点并通过SLURM传递给任务B?

Cluster computing 如何获取任务A';s节点并通过SLURM传递给任务B?,cluster-computing,slurm,sbatch,Cluster Computing,Slurm,Sbatch,我有一个(自行开发的)集群网络基准测试,我正试图使用SLURM调度程序运行它。基准测试使用标准的客户机/服务器体系结构,该体系结构要求在启动时为客户机可执行文件提供服务器IP地址(或主机名)参数 通常情况下,我会编写一个服务器脚本,将主nic的地址变灰,并将信息放到共享文件系统上,但在群集节点上不起作用。我还知道有一个SLURM_JOB_NODELIST env变量,它允许脚本从我的sbatch脚本中查看集群中所有节点的列表,但我不认为这在这种情况下有什么用处 如何确定调度程序选择了哪个节点来运

我有一个(自行开发的)集群网络基准测试,我正试图使用SLURM调度程序运行它。基准测试使用标准的客户机/服务器体系结构,该体系结构要求在启动时为客户机可执行文件提供服务器IP地址(或主机名)参数

通常情况下,我会编写一个服务器脚本,将主nic的地址变灰,并将信息放到共享文件系统上,但在群集节点上不起作用。我还知道有一个SLURM_JOB_NODELIST env变量,它允许脚本从我的sbatch脚本中查看集群中所有节点的列表,但我不认为这在这种情况下有什么用处


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

我不敢相信,在询问之前我没有想到这一点。这比听起来容易,关键是
SLURM\u JOB\u NODELIST
。您可以将该变量从sbatch脚本传递到第二个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