Linux

rsync - 在 rsync 執行時更新同步列表

  • May 12, 2017

我有一個在遠端機器上執行的大型計算作業,每約 20 分鐘生成約 40 個數據文件。我想在生成文件後立即將生成的文件從遠端機器拉到我的本地機器上,並立即從遠端機器上刪除它們。

我已經使用rsync --remove-source files user@remote:~/datadir/* ./localdir. 但是,這不會rsync“實時”執行,即如果添加了新文件,datadir我需要重新執行rsync.

據我了解,rsync首先創建要複製的文件列表,然後逐個瀏覽列表。我想知道,有沒有辦法在添加新文件時更新列表datadir,或者有其他方法可以在生成文件後立即將文件從遠端機器移動到本地?

嗯,這有點像當你去看醫生並說“醫生!我這樣做的時候很痛!” 他說“所以不要那樣做!問題解決了!”。

rsync用於同步目錄,但根據您的描述,您不想這樣做。您想“取消同步”兩個目錄:您希望文件位於一個目錄中,但不能同時位於兩個目錄中。

我認為您不能修改在另一個系統上生成文件的程式碼,因為如果可以的話,您只需讓它執行ftprcpcurl或一些文件完成後立即將它們推送到從源機器中刪除目標機器,然後刪除它們。

因此,僅在目標電腦上工作,您最好只執行定期作業以登錄遠端電腦並複制和刪除*~/datadir中的所有內容。它將節省rsync比較兩個目錄的成本:這是浪費精力,因為您不關心./localdir的內容- 它總是會將~/datadir的內容拉入其中。使用rcpscp是最簡單的,但如果您在遠端系統上擁有的唯一訪問權限是rsync*,則在cron作業中執行它。

這將導致文件創建和傳輸之間出現幾分鐘的延遲,具體取決於您的工作週期,因為正如您所注意到的,rsync不會實時執行。如果您需要立即傳輸,則必須在另一台機器上執行文件共享伺服器(例如amule),但這很複雜,而且需要節省幾分鐘的成本,而且您仍然需要不時登錄才能刪除文件:沒有文件共享實用程序可以為您做的事情。

在所有這一切中都有一個潛伏的小鬼,你怎麼知道你有完整且未損壞的文件在另一端等著你?

如果您只是從創建文件的目錄中獲取內容,那麼任何數量的內容都可能導致您將完整文件的一部分轉移到目標機器上。例如,您可以在源電腦上的程式碼寫出文件時啟動副本(或*rsync或其他)。*或者由於某些硬體問題,例如磁碟已滿,創建程序可能會在創建過程中出現故障。

因此,在執行此類操作時,我總是有單獨的創建和傳輸目錄,然後在成功創建從創建到傳輸目錄後的mv而不是 *cp )文件。*我對文件損壞也非常偏執,所以我總是為源文件以及所有防止損壞的自動低級內容製作我自己的摘要/校驗和/清單文件。

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