Linux
如何通過生成多個執行緒使用 GNU 並行同時複製兩個文件夾?
當我在.
machineB
_machineC``machineA``machineA
如果文件不在那裡,
machineB
那麼它肯定應該在那裡,machineC
所以我會先嘗試從那裡複製文件machineB
,如果它不在那裡,machineB
那麼我會嘗試從machineC
.我正在使用 GNU Parallel 庫並行複製文件,它工作正常。目前我正在並行複制兩個文件。
早些時候,我使用 GNU 並行複製
PRIMARY_PARTITION
文件PRIMARY
夾中的文件,一旦完成,然後我只使用相同的 GNU 並行複製SECONDARY_PARTITION
文件夾中的文件,因此它現在是連續的 wrt和文件夾。SECONDARY``PRIMARY``SECONDARY
現在我決定同時復製文件
PRIMARY
和SECONDARY
文件夾。意思是,我將同時復製文件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 1568) # this will have more file numbers export dir3=/testing/snapshot/20140103 find "$PRIMARY" -mindepth 1 -delete find "$SECONDARY" -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 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_CopyInPrimary ::: "${PRIMARY_PARTITION[@]}" & parallel -j 2 do_CopyInSecondary ::: "${SECONDARY_PARTITION[@]}" & wait echo "All files copied."
問題陳述:-
在某些時候使用上面的腳本我得到了這個異常 -
ssh_exchange_identification: Connection closed by remote host ssh_exchange_identification: Connection closed by remote host ssh_exchange_identification: Connection closed by remote host
有沒有更好的方法來做和我現在做的一樣的事情?我想,我仍然可以使用 GNU Parallel 讓它工作嗎?
該錯誤通常是由同時啟動的 ssh/scp 過多引起的。這有點奇怪,因為您最多執行 4。這讓我相信 $FILERS_LOCATION_1+2 上的 /etc/ssh/sshd_config:MaxStartups 和 MaxSessions 設置得太低。
幸運的是,如果命令失敗,我們可以讓 GNU Parallel 重試:
do_Copy() { el=$1 PRIMSEC=$2 scp david@$FILERS_LOCATION_1:$dir3/new_weekly_2014_"$el"_200003_5.data $PRIMSEC/. || scp david@$FILERS_LOCATION_2:$dir3/new_weekly_2014_"$el"_200003_5.data $PRIMSEC/. } export -f do_Copy parallel --retries 10 -j 2 do_Copy {} $PRIMARY ::: "${PRIMARY_PARTITION[@]}" & parallel --retries 10 -j 2 do_Copy {} $SECONDARY ::: "${SECONDARY_PARTITION[@]}" & wait echo "All files copied."