bash / slurm中是否有办法让脚本知道它在哪个节点上运行?
所以我sbatch一个名为wrapCode.sh的bash脚本,我正在监视脚本时间以及它运行的节点。我知道如何监控脚本时间,但有没有办法在最后回显出我所在的节点?
sstat这样做,但我需要知道我的工作ID是什么,这个剧本似乎也不知道(或者至少我还没有找到它)。
答案 0 :(得分:2)
一种简单但有效且经常使用的方法,即在其运行的节点的作业输出中写入是
srun hostname
到它。此外,作业ID可通过环境变量SLURM_JOB_ID从作业脚本中获得;所以你可以使用
sstat -j $SLURM_JOB_ID
在你的slurm脚本中获取你想要的信息。
答案 1 :(得分:1)
当您向网格提交作业时,您始终会收到一条消息,告诉您JobID。如果以交互方式执行此操作,您将看到如下内容:
$ sbatch wrapCode.sh
Submitted batch job 106
因此,您可以编写一个简单的包装器bash脚本来完成作业提交并为您获取JobID。之后,您可以使用scontrol
命令获取有关作业(包括节点)的详细信息,如下所示:
#!/bin/bash
Command="sbatch wrapCode.sh"
Submit_Output="$($Command 2>&1)"
JobId=`echo $Submit_Output | grep 'Submitted batch job' | awk '{print $4}'`
echo $JobId
# --> Sleep here for a few seconds to wait until the job is actually launched
Host=`scontrol show job $JobId | grep ' NodeList' | awk -F'=' '{print $2}'`
echo $Host
答案 2 :(得分:1)
您的工作的jobid可以在环境变量SLURM_JOBID中找到。 提交作业后,SLURM会自动设置此变量。
至于查找运行作业的节点的名称,可以在环境变量SLURMD_NODENAME中找到。
变量SLURM_NODELIST将为您提供分配给作业的节点列表(除非您跨多个节点运行作业,这将只包含一个名称)。
有许多变量包含有关您工作的信息,请参阅https://slurm.schedmd.com/sbatch.html#lbAH