【发布时间】:2019-11-15 06:48:41
【问题描述】:
我在 CentOS 6.9 上运行 slurm 17.11.7。我已经修改了我的 /gpfs0/export/slurm/conf/epilog 脚本。我最终想将作业资源利用率信息打印到用作每个用户作业的标准输出文件中。
在将它推广给其他用户之前,我一直在脚本末尾的条件中为自己测试它。以下是我修改后的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
问题:我哪里出错了?
编辑:这是在输出结束时尝试打印作业的资源利用率的上下文中的 MWE。
【问题讨论】:
-
您的问题是结语没有运行还是运行但无法写入输出文件?
/var/log/epilog.log被修改了吗? -
epilog 脚本肯定正在运行。从头开始的目录肯定会被创建。 node21 上的
/var/log/epilog.log未被修改。
标签: slurm