Linux

如果本地電腦關閉,如何從其他伺服器複製文件

  • April 2, 2015

我有一個腳本,它將在每個伺服器中執行並將某些文件複製到其中。腳本知道我在哪裡執行以及我需要複製哪些文件。

腳本將從本地數據中心複製文件,local_dc但如果它關閉或沒有響應,那麼它將從遠端數據中心複製相同的文件remote_dc_1,如果它也關閉,那麼它將從另一個遠端數據中心複製相同的文件,remote_dc_2如下所示 -

do_Copy() {
 el=$1
 PRIMSEC=$2
 scp david@"$local_dc":"$dir3"/new_weekly_2014_"$el"_200003_5.data "$PRIMSEC"/. || scp david@"$remote_dc_1":"$dir3"/new_weekly_2014_"$el"_200003_5.data "$PRIMSEC"/. || scp david@"$remote_dc_2":"$dir3"/new_weekly_2014_"$el"_200003_5.data "$PRIMSEC"/.
}
export -f do_Copy

# copying 5 files in parallel simultaneously in primary and secondary folder
parallel --retries 10 -j 5 do_Copy {} $PRIMARY ::: $primary_partition &
parallel --retries 10 -j 5 do_Copy {} $SECONDARY ::: $secondary_partition &
wait

echo "All files copied successfully."

現在我的問題是:

  • 假設local_dc機器出現故障,那麼它肯定會從remote_dc_1機器複製嗎?如果remote_dc_1機器也宕機了,那麼它也會從那裡複製remote_dc_2嗎?
  • 現在,如果所有三台機器都停機了,那會發生什麼?在這種情況下,我想列印消息說,所有三台機器都已關閉,因此退出了 shell 腳本。

如果不關閉機器,我無法正確測試。

是的。它將嘗試從第一個複制,如果失敗,它將嘗試第二個,如果也失敗,它將嘗試第三個。最後讓它給你發電子郵件,使用這個:

scp ... || scp ... || scp || echo "All attempts failed" | mailx -r "foo@bar.com"

要讓每個 scp 命令告訴您它是否失敗,您可以使用子shell:

scp ... || (echo "machine1 down" | mailx -r "foo@bar.com"&& scp ... ) ||
( echo "machine2 down" | mailx -r "foo@bar.com" && scp ... ) || 
    echo "All attempts failed" | mailx -r "foo@bar.com"

引用自:https://unix.stackexchange.com/questions/194068