问题描述
我在Slurm上运行阵列作业,因此每个作业都需要将文件从本地目录复制到临时目录。此cp
不应同时出现。
这是我想出的代码:
mydirectory=mydb
LOCKFILE_1=${mydirectory}.lock
set -e
(
flock -w 3600 200 # Wait for the lockfile for max. 1 hour (3600 s),to not block the queue forever in case of dead lock files.
cp -r ${mydirectory} $TMPDIR/newdestinationdirectory
) 200>$LOCKFILE_1
set +e
这段代码做对了吗? 还是我需要
rm -f $LOCKFILE_1
解决方法
如果我理解正确,则希望限制文件系统和网络上的负载。 Slurm的sbcast命令适用于这种情况。您只能复制单个文件,因此在广播到所有节点之前,应先对目录进行压缩:
tar cf ${mydirectory}.tar $mydirectory
sbcast ${mydirectory}.tar $TMPDIR/
srun -n ${SLURM_JOB_NUM_NODES} --ntasks-per-node=1 "tar xf ${mydirectory}.tar -C $TMPDIR/"
这只能在工作分配内(例如,在工作脚本内)完成!