bash脚本在内部运行时如何锁定文件夹

bash脚本在内部运行时如何锁定文件夹,bash,makefile,Bash,Makefile,我有一个任务流,它可以分为步骤1和步骤2,都在bash中运行。 步骤1需要在文件夹a中运行bash脚本。 当我将作业提交到多个主机时,有多个线程将触发文件夹_a中的bash脚本,这将中断该函数 我希望我的作业按以下方式运行: 每个作业的步骤_1都必须逐个运行,否则会中断文件夹_a中的功能 为了提高速度,每个作业的step_2都可以并行运行 如果文件夹_a中的bash正在运行并且拒绝为其他线程运行,如何锁定该文件夹? 也许我只能将step_1 bash top脚本锁定在文件夹a中,而不是文件夹中。

我有一个任务流,它可以分为步骤1和步骤2,都在bash中运行。 步骤1需要在文件夹a中运行bash脚本。 当我将作业提交到多个主机时,有多个线程将触发文件夹_a中的bash脚本,这将中断该函数

我希望我的作业按以下方式运行:

  • 每个作业的步骤_1都必须逐个运行,否则会中断文件夹_a中的功能
  • 为了提高速度,每个作业的step_2都可以并行运行
  • 如果文件夹_a中的bash正在运行并且拒绝为其他线程运行,如何锁定该文件夹?
    也许我只能将step_1 bash top脚本锁定在文件夹a中,而不是文件夹中。

    如果您在类Unix系统(GNU/Linux,BSD…)下工作,您可能有
    flock
    ,您可以在
    flock
    调用中包装关键作业:

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

    有关详细信息,请参见
    man flock

    如果您在类Unix系统(GNU/Linux,BSD…)下工作,您可能有
    flock
    ,您可以在
    flock
    调用中包装关键作业:

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

    有关详细信息,请参见
    man flock

    请参见或使用GNU Parallel作为互斥器。。。您还可以使用GNU Parallel在多台主机上并行运行作业。请参阅,或者您可以使用GNU Parallel作为互斥对象。。。您还可以使用GNU并行在多台主机上并行运行您的作业。我测试了flock,它适合我的需要,添加了flock-x。在多进程需要锁定的命令之前。我的顶级任务shell脚本中的示例:1。cd文件夹_a;2.flock-x。“我测试了flock,它适合我的需要,”flock-x补充道。在多进程需要锁定的命令之前。我的顶级任务shell脚本中的示例:1。cd文件夹_a;2.flock-x。步骤1的命令\u