通过Slurm Epilog脚本修改文件无效

时间:2019-01-17 20:11:49

标签: slurm

我在CentOS 6.9上运行口碑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 $2}'`
    # 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修改了stdout文件。

我选择了计算节点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 $2}'`
    python -c "import sys; stdout=sys.argv[1]; f=open(stdout, 'a'); f.write('sticks\n'); f.close();"  ${STDOUT}
    #echo "HELLO! ${USER}"
fi

问题:我哪里出问题了?

EDIT:这是尝试在输出末尾打印作业资源利用情况下的MWE。

2 个答案:

答案 0 :(得分:0)

要获取此信息,请在epilog.log脚本的末尾附加

# writing job statistics into job output
OUT=`scontrol show jobid ${SLURM_JOB_ID} | grep StdOut | awk 'BEGIN{FS="="}{print $2}'`
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语句不起作用。

答案 1 :(得分:0)

根据this page,您可以通过在输出前添加'print'命令来从Slurm序言中打印到stdout。

例如,代替

echo "Starting prolog"

您需要做

echo "print Starting Prolog"

不幸的是,这似乎仅适用于序言,而不适用于尾声。