我在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再次删除锁定文件?
发布于 2020-09-15 17:20:53
如果我理解正确的话,您希望限制文件系统和网络上的负载。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/"这只能在作业分配中完成(例如,在作业脚本中)!
https://stackoverflow.com/questions/63810260
复制相似问题