繁体   English   中英

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

[英]How to launch two threads in bash shell script?

我试图从文件复制machineBmachineCmachineA ,因为我对我的运行下面的shell脚本machineA

如果文件在machineB不存在,那么肯定应该在machineC存在,因此我将首先尝试从machineB复制文件,如果在machineB不存在,那么我将尝试从machineC复制相同的文件。

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

目前,我复制PRIMARY_PARTITION在文件PRIMARY使用GNU并行文件夹,一旦做到这一点,那么我将复制SECONDARY_PARTITION文件在SECONDARY使用GNU平行一样的,所以它是连续的和现在一样WRT的文件夹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脚本中如何工作?

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM