簡體   English   中英

通過 ssh 傳輸后 rsync 掛起

[英]rsync hangs after transfer over ssh

我編寫了一個 bash 腳本,用於將文件從網絡服務器 (HostGator) 備份到運行 FreeBSD 的本地文件服務器。

我通過 ssh(來自文件服務器)使用 rsync 連接到遠程服務器(我已經預先設置了共享的 rsa 密鑰)。 當我運行以下行開始同步時,文件似乎都很好,但命令永遠不會返回並且腳本永遠掛起:

/usr/local/bin/rsync -az --chown=root:admin --chmod=ugo=rwX --exclude ".inode_lock" --rsh='ssh -p2222' admin@domain.com:/home/admin/ '/mnt/blah/blah/LocalBackup/' >> "./Logs/Backup Log.txt"

等待幾分鍾后,當我按 Ctrl+C 停止該命令時,我彈出以下錯誤消息:

^CKilled by signal 2.
rsync error: unexplained error (code 255) at rsync.c(636) [generator=3.1.2]
rsync error: received SIGUSR1 (code 19) at main.c(1429) [receiver=3.1.2]

即使雙方已經同步並且只是檢查更改,這種情況仍然會發生。

我不確定如何解決問題。 我確實嘗試刪除 rsync 的 -v 開關,因為一些用戶報告說這會導致掛起,但我沒有看到任何區別。

編輯

再補充一點。 我今天再次運行腳本以繼續進行故障排除。 如果我讓腳本在掛起后繼續運行而不打擾它,最終我會收到以下消息:

rsync: connection unexpectedly closed (2984632408 bytes received so far) [receiv    er]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [receive    r=3.1.2]
rsync: connection unexpectedly closed (8689703 bytes received so far) [generator    ]
rsync error: unexplained error (code 255) at io.c(226) [generator=3.1.2]

然后返回到命令提示符。 我認為這可能是由於遠程服務器端超時但不確定。 但我仍然不確定為什么會發生掛起。

更新

我做了一個額外的測試,並將 rsync 傳輸限制到包含一些示例文件和子文件夾的特定測試文件夾,而不是抓取整個主目錄。 當我這樣做時,它能夠成功完成傳輸並適當退出。 因此,在導致問題的服務器主目錄中的某處似乎必須有一些文件或文件夾。 是否存在 rsync 無法傳輸文件的特定情況? 我已經看到它在嘗試同步被寫鎖定的文件時拋出錯誤,並出現“權限被拒絕”錯誤,但即使是這些文件也沒有阻止它繼續。 有什么想法嗎?

另外要注意的是,我要連接的遠程服務器位於共享主機帳戶上,因此我沒有 root 訪問權限。 我不知道這是否會導致一些問題?

更新 2

因此,我研究了 rsync 命令並添加了更多命令行參數 --progress 和 --stats(以及 --verbose),以便我可以更好地了解它在哪里死亡。 我現在注意到的是,當運行命令時,它掛在一個從服務器下載的大文件上。 但是現在隨着 --progress 被報告(我現在將它直接輸出到終端而不是文件),它似乎進展順利,到目前為止沒有掛斷。

我現在開始懷疑 ssh 連接是否超時或由於不活動而導致? 特別是因為在原始情況下,在進行大文件傳輸時,函數長時間沒有任何輸出。 這是一種可能的情況嗎? 如果是這樣,我該怎么做才能保持連接打開? (我不確定將 --progress 更新直接打印到日志文件是個好主意)。

好的,我想通了。 顯然,HostGator 的共享服務器默認設置了 30-45 分鍾的 SSH 超時限制。 由於運行 rsync 花費的時間超過該限制,因此它正在關閉連接。 我打電話並與他們的技術支持人員交談,他們為我的服務器增加了它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM