通过 slurm epilog 脚本修改文件无效

Modifying files via slurm epilog script is not effective

我在 CentOS 6.9 运行ning slurm 17.11.7。我修改了 /gpfs0/export/slurm/conf/epilog 脚本。我最终想将作业资源利用信息打印到用于每个用户作业的 stdout 文件中。

在将它推广给其他用户之前,我一直在脚本末尾的条件下为自己测试它。下面是我修改后的 epilog 脚本:

#!/bin/bash
# Clear out TMPDIR on the shared file system after job completes
exec >> /var/log/epilog.log
exec 2>> /var/log/epilog.log    

if [ -z $SLURM_JOB_ID ]
then
        echo -e " This script should be executed from slurm."
        exit 1
fi

TMPDIR="/gpfs0/scratch/${SLURM_JOB_ID}"

rm -rf $TMPDIR

### My additions to the existing script ###
if [ "$USER" == "myuserid" ]
then
    STDOUT=`scontrol show jobid ${SLURM_JOB_ID} | grep StdOut | awk 'BEGIN{FS="="}{print }'`
    # Regular stdout/stderr is not respected, must use python.
    python -c "import sys; stdout=sys.argv[1]; f=open(stdout, 'a'); f.write('sticks\n'); f.close();"  ${STDOUT}

fi
exit 0

slurm.conf user manual 的 Prolog 和 Epilog 部分看来 stdout/stderr 没有得到尊重。因此我用 python.

修改标准输出文件

我选择了计算节点 node21 来 运行 这项工作,所以我登录到 node21 并尝试了一些方法来让它注意到我对 epilog 脚本的更改。

重新配置 slurmd:

sudo scontrol reconfigure

重启 slurm 守护进程:

sudo service slurm stop
sudo service slurm start

当我提交作业时,这两个似乎都没有得到对 epilog 脚本的更改。当在批处理脚本中放置相同的条件时,它 运行 完美无缺:

#!/bin/bash
#SBATCH --nodelist=node21
echo "Hello you!"
echo $HOSTNAME

if [ "$USER" == "myuserid" ]
then
    STDOUT=`scontrol show jobid ${SLURM_JOB_ID} | grep StdOut | awk 'BEGIN{FS="="}{print }'`
    python -c "import sys; stdout=sys.argv[1]; f=open(stdout, 'a'); f.write('sticks\n'); f.close();"  ${STDOUT}
    #echo "HELLO! ${USER}"
fi

问题:我哪里出错了?

编辑:这是一个 MWE,它来自试图在输出末尾打印作业的资源利用率的上下文。

要得到这个,请在​​ epilog.log 脚本的末尾附加

# writing job statistics into job output
OUT=`scontrol show jobid ${SLURM_JOB_ID} | grep StdOut | awk 'BEGIN{FS="="}{print }'`
echo -e "sticks" >> ${OUT} 2>&1

无需重新启动 slurm 守护程序。可以向其中添加其他命令以获得资源利用率,例如

sleep 5s   ### Sleep to give chance for job to be written to slurm database for job statistics.
sacct --units M --format=jobid,user%5,state%7,CPUTime,ExitCode%4,MaxRSS,NodeList,Partition,ReqTRES%25,Submit,Start,End,Elapsed -j $SLURM_JOBID >> $OUT 2>&1

基本上,您仍然可以使用 >> 附加输出文件。显然,我没有想到常规输出重定向仍然有效。目前还不清楚为什么 python 对此的声明不起作用。

根据 this page,您可以通过在输出前加上 'print' 命令从 Slurm prolog 打印到标准输出。

例如,而不是

echo "Starting prolog"

你需要做的

echo "print Starting Prolog"

不幸的是,这似乎只对序言有效,对结尾无效。