首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在bash脚本中启动两个线程?

如何在bash脚本中启动两个线程?
EN

Stack Overflow用户
提问于 2014-05-19 15:19:55
回答 1查看 239关注 0票数 1

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

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

我正在使用GNU并行库并行复制文件,而且它工作得很好。目前,我正在并行复制两个文件。

目前,我正在使用GNU并行复制PRIMARY_PARTITION文件夹中的PRIMARY文件,然后使用相同的GNU并行将SECONDARY_PARTITION文件复制到SECONDARY文件夹中,以便从现在起连续使用w.r.t PRIMARYSECONDARY文件夹

下面是我的shell脚本,一切都很好-

代码语言:javascript
复制
#!/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文件夹中的文件。

总之,我只需要启动两个线程,一个线程就能运行-

代码语言:javascript
复制
# 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[@]}"

第二个线程会运行这个-

代码语言:javascript
复制
# 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脚本中这将如何工作?

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

在bash脚本中可以这样做吗?

EN

回答 1

Stack Overflow用户

发布于 2014-05-19 15:23:27

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23741467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档