bash - 当bash脚本在里面运行时如何锁定文件夹
问题描述
我有一个任务流程,可以分为 step_1 和 step_2,两者都在 bash 中运行。step_1 需要在 folder_a 中运行一个 bash 脚本。当我将作业提交到多个主机时,有多个线程将触发 folder_a 中的 bash 脚本,这将破坏该功能。
我希望我的工作如下运行:
- 每个作业的 step_1 都必须一个一个地运行,否则会破坏 folder_a 中的功能。
- 每个作业的 step_2 都可以并行运行以提高速度。
如果 folder_a 中的 bash 正在运行并拒绝为其他线程运行,如何锁定文件夹?也许我只能将 step_1 bash 顶部脚本锁定在 folder_a 中,而不是文件夹。
解决方案
如果您在类 Unix 系统(GNU/Linux、BSD...)下工作,您可能拥有flock
并且可以将关键工作封装在flock
调用中:
step1_job: | folder_a/.lock
flock $| command [arguments]
folder_a/.lock:
touch $@
详情请参阅man flock
。
推荐阅读
- ios - SceneKit UIImage 材质为黑色
- node.js - 如何将 pdf 文件从 node/express 应用程序发送到 Flutter 应用程序?
- unity3d - 在 Unity 2D 中设置最大水平移动速度而不设置最大速度
- javascript - 如何为 D3 图表启用静态链接
- python - 如何使用 Skimage 调整训练数据的大小?
- c# - 创建 3D 阵列意见系统
- list - Haskell:如何创建一个空列表作为数据类型的选项?
- javascript - 在 SVG 路径中移动到鼠标单击 (d3.js)
- deep-learning - 推理时间短的分类模型
- php - 如何进行批量操作以将文件复制到谷歌驱动器,php?