使用羊群复制文件

问题描述

我在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/"

这只能在工作分配内(例如,在工作脚本内)完成!

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...