首页 > 解决方案 > 当bash脚本在里面运行时如何锁定文件夹

问题描述

我有一个任务流程,可以分为 step_1 和 step_2,两者都在 bash 中运行。step_1 需要在 folder_a 中运行一个 bash 脚本。当我将作业提交到多个主机时,有多个线程将触发 folder_a 中的 bash 脚本,这将破坏该功能。

我希望我的工作如下运行:

  1. 每个作业的 step_1 都必须一个一个地运行,否则会破坏 folder_a 中的功能。
  2. 每个作业的 step_2 都可以并行运行以提高速度。

如果 folder_a 中的 bash 正在运行并拒绝为其他线程运行,如何锁定文件夹?也许我只能将 step_1 bash 顶部脚本锁定在 folder_a 中,而不是文件夹。

标签: bashmakefile

解决方案


如果您在类 Unix 系统(GNU/Linux、BSD...)下工作,您可能拥有flock并且可以将关键工作封装在flock调用中:

step1_job: | folder_a/.lock
    flock $| command [arguments]

folder_a/.lock:
    touch $@

详情请参阅man flock


推荐阅读