Linux
如果本地電腦關閉,如何從其他伺服器複製文件
我有一個腳本,它將在每個伺服器中執行並將某些文件複製到其中。腳本知道我在哪裡執行以及我需要複製哪些文件。
腳本將從本地數據中心複製文件,
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"