[英]How to launch two threads in bash shell script?
我试图从文件复制machineB
和machineC
到machineA
,因为我对我的运行下面的shell脚本machineA
。
如果文件在machineB
不存在,那么肯定应该在machineC
存在,因此我将首先尝试从machineB
复制文件,如果在machineB
不存在,那么我将尝试从machineC
复制相同的文件。
我正在使用GNU Parallel库并行复制文件,并且工作正常。 目前,我正在并行复制两个文件。
目前,我复制PRIMARY_PARTITION
在文件PRIMARY
使用GNU并行文件夹,一旦做到这一点,那么我将复制SECONDARY_PARTITION
文件在SECONDARY
使用GNU平行一样的,所以它是连续的和现在一样WRT的文件夹PRIMARY
和SECONDARY
文件夹
以下是我的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
文件夹中的文件,它还应该同时并行复制两个文件吗?
这意味着它们不应同时在PRIMARY
和SECONDARY
文件夹中并行复制文件,而不是在完成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.