gpt4 book ai didi

linux - 如何在 bash shell 脚本中启动两个线程?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:58:02 25 4
gpt4 key购买 nike

我正在尝试将文件从 machineBmachineC 复制到 machineA 中,因为我在 machineA< 上运行下面的 shell 脚本.

如果文件不在 machineB 中,那么它肯定在 machineC 中,所以我将尝试从 machineB 复制文件首先,如果它不在 machineB 中,那么我将尝试从 machineC 中复制相同的文件。

我正在使用 GNU Parallel 库并行复制文件并且工作正常。目前我正在并行复制两个文件。

目前,我正在使用 GNU parallel 将 PRIMARY_PARTITION 文件复制到 PRIMARY 文件夹中,完成后,我将复制 SECONDARY_PARTITION 文件在 SECONDARY 文件夹中使用相同的 GNU parallel 所以它是顺序的,因为现在 w.r.t PRIMARYSECONDARY 文件夹

下面是我的 shell 脚本,一切正常 -

#!/bin/bash

export PRIMARY=/test01/primary
export SECONDARY=/test02/secondary
readonly FILERS_LOCATION=(machineB machineC)
export FILERS_LOCATION_1=${FILERS_LOCATION[0]}
export FILERS_LOCATION_2=${FILERS_LOCATION[1]}
PRIMARY_PARTITION=(550 274 2 546 278) # this will have more file numbers
SECONDARY_PARTITION=(1643 1103 1372 1096 1369) # this will have more file numbers

export dir3=/testing/snapshot/20140103

# delete primary files first and then copy
find "$PRIMARY" -mindepth 1 -delete

do_CopyInPrimary() {
el=$1
scp david@$FILERS_LOCATION_1:$dir3/new_weekly_2014_"$el"_200003_5.data $PRIMARY/. || scp david@$FILERS_LOCATION_2:$dir3/new_weekly_2014_"$el"_200003_5.data $PRIMARY/.
}
export -f do_CopyInPrimary
parallel -j 2 do_CopyInPrimary ::: "${PRIMARY_PARTITION[@]}"

# delete secondary files first and then copy
find "$SECONDARY" -mindepth 1 -delete

do_CopyInSecondary() {
el=$1
scp david@$FILERS_LOCATION_1:$dir3/new_weekly_2014_"$el"_200003_5.data $SECONDARY/. || scp david@$FILERS_LOCATION_2:$dir3/new_weekly_2014_"$el"_200003_5.data $SECONDARY/.
}
export -f do_CopyInSecondary
parallel -j 2 do_CopyInSecondary ::: "${SECONDARY_PARTITION[@]}"

问题陈述:-

有什么方法可以启动两个线程,一个使用与上面相同的设置复制 PRIMARY 文件夹中的文件,这意味着它将并行复制两个文件。第二个线程使用与上面相同的设置复制 SECONDARY 文件夹中的文件,它还应该同时并行复制两个文件吗?

这意味着他们应该同时在 PRIMARYSECONDARY 文件夹中同时复制文件,而不是在 PRIMARY 文件夹完成后,才将文件复制到 SECONDARY 文件夹。

目前,一旦 PRIMARY 文件夹文件完成,那么只有我尝试复制 SECONDARY 文件夹中的文件。

简而言之,我只需要启动两个线程,一个线程将运行这个 -

# delete primary files first and then copy
find "$PRIMARY" -mindepth 1 -delete

do_CopyInPrimary() {
el=$1
scp david@$FILERS_LOCATION_1:$dir3/new_weekly_2014_"$el"_200003_5.data $PRIMARY/. || scp david@$FILERS_LOCATION_2:$dir3/new_weekly_2014_"$el"_200003_5.data $PRIMARY/.
}
export -f do_CopyInPrimary
parallel -j 2 do_CopyInPrimary ::: "${PRIMARY_PARTITION[@]}"

第二个线程将运行这个 -

# delete secondary files first and then copy
find "$SECONDARY" -mindepth 1 -delete

do_CopyInSecondary() {
el=$1
scp david@$FILERS_LOCATION_1:$dir3/new_weekly_2014_"$el"_200003_5.data $SECONDARY/. || scp david@$FILERS_LOCATION_2:$dir3/new_weekly_2014_"$el"_200003_5.data $SECONDARY/.
}
export -f do_CopyInSecondary
parallel -j 2 do_CopyInSecondary ::: "${SECONDARY_PARTITION[@]}"

一旦所有文件都成功复制,它应该回显所有文件都已复制的消息。在 java 中,我知道如何启动两个线程并且每个线程都在执行特定任务,但不确定在 bash shell 脚本中这将如何工作?

我的主要任务是在 PRIMARY 文件夹和 SECONDARY 文件夹中同时使用 GNU parallel 并行复制两个文件?

这可以在 bash shell 脚本中完成吗?

最佳答案

使用 & 运算符简单地启动另一个 bash 脚本以在终端中运行可能会在这里解决您的需求

关于linux - 如何在 bash shell 脚本中启动两个线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23741467/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com