【问题标题】:Usage of flock for copying files使用flock来复制文件
【发布时间】:2020-09-09 11:03:11
【问题描述】:

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

再次删除锁定文件?

【问题讨论】:

  • This cp should not occur simultaneously。为什么?您可以同时阅读。您不能同时读取和写入 - 但此处没有显示写入,因此在每个作业的目标位置唯一之前,只需并行复制即可。
  • 系统管理员可能会生气(他过去也这样做过......)

标签: bash slurm flock


【解决方案1】:

如果我理解正确,您想限制文件系统和网络上的负载。 Slurm 的 sbcast 命令适用于这种情况。您只能复制单个文件,因此您应该在广播到所有节点之前 tar 目录:

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

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

【讨论】:

  • 这适用于所有当前活跃的 slurm 工作,对吧?
  • 它必须在作业脚本或作业分配中运行。所以不适用于已经在运行的作业。
猜你喜欢
  • 2012-04-09
  • 1970-01-01
  • 2017-10-19
  • 2013-05-23
  • 2015-03-29
  • 2014-04-24
  • 2019-10-24
  • 2018-03-10
  • 1970-01-01
相关资源
最近更新 更多