使用nohup和--remove-source-files在后臺運行rsync并記錄日志方式
一、什么是 --remove-source-files?
- 作用:在文件成功同步到目標路徑后,刪除源路徑中的文件。
- 適用場景:需要將文件從一處“移動”到另一處,而不是保留副本,例如清理舊數(shù)據(jù)、遷移文件到新存儲。
- 注意:此選項只刪除文件,不會刪除源目錄結構。
與常見的 mv
命令相比,rsync --remove-source-files
更適合跨設備或跨網(wǎng)絡的移動操作,因為它支持增量傳輸和錯誤恢復。
二、示例命令
以下是一個使用 nohup
和 --remove-source-files
的完整命令模板:
nohup rsync -av --remove-source-files /source/path/ /destination/path/ > /var/log/rsync_$(date +%Y%m%d_%H%M%S).log 2>&1 &
讓我們逐步拆解這條命令。
三、命令詳解
1. nohup
- 作用:確保任務在終端關閉后繼續(xù)運行,忽略掛起信號(SIGHUP)。
- 用法:置于命令開頭。
2. rsync -av --remove-source-files
-a
(歸檔模式):遞歸同步目錄,保留文件屬性(如權限、時間戳)。-v
(詳細輸出):顯示同步和刪除的詳細信息。--remove-source-files
:同步完成后刪除源文件。
源路徑和目標路徑:
/source/path/
:包含需要移動的文件或目錄。/destination/path/
:文件的目標位置。
3. 日志重定向
> /var/log/rsync_$(date +%Y%m%d_%H%M%S).log
:
- 將標準輸出重定向到日志文件。
- 使用
$(date +%Y%m%d_%H%M%S)
生成時間戳,例如rsync_20250324_153022.log
。
2>&1
:將標準錯誤也重定向到日志文件,確保所有信息都被記錄。
4. 后臺運行 &
- 作用:將任務放入后臺,釋放終端。
四、使用場景與示例
場景1:本地文件移動
將 /data/old/
中的文件移動到 /data/new/
:
nohup rsync -av --remove-source-files /data/old/ /data/new/ > /var/log/rsync_$(date +%Y%m%d_%H%M%S).log 2>&1 &
- 結果:
/data/old/
中的文件被同步到/data/new/
并刪除,目錄結構保留。
場景2:遠程文件遷移
將本地文件移動到遠程服務器:
nohup rsync -avz --remove-source-files -e ssh /local/data/ user@remote:/remote/data/ > /var/log/rsync_$(date +%Y%m%d_%H%M%S).log 2>&1 &
-z
:壓縮數(shù)據(jù),優(yōu)化網(wǎng)絡傳輸。-e ssh
:通過SSH連接遠程服務器。
場景3:特定文件移動
只移動特定類型的文件(例如 .txt
文件):
nohup rsync -av --remove-source-files --include '*.txt' --exclude '*' /source/ /destination/ > /var/log/rsync_$(date +%Y%m%d_%H%M%S).log 2>&1 &
--include
和--exclude
組合過濾需要移動的文件。
五、操作步驟
準備工作:
- 確保源路徑和目標路徑存在且可訪問。
- 創(chuàng)建日志目錄:
mkdir -p /var/log/
。 - 檢查權限:對源路徑有讀寫權限,對目標路徑和日志路徑有寫權限。
執(zhí)行命令:
- 輸入命令并運行,任務將在后臺啟動。
- 查看進程:
ps -ef | grep rsync
。
驗證結果:
- 檢查日志:
tail -f /var/log/rsync_*.log
,確認同步和刪除操作。 - 檢查源路徑:確認文件已被刪除。
- 檢查目標路徑:確認文件已正確同步。
六、--remove-source-files 的工作原理
- 同步優(yōu)先:只有當文件成功同步到目標路徑后,源文件才會被刪除。
- 安全性:如果同步失?。ɡ缒繕舜疟P滿或網(wǎng)絡中斷),源文件會保留。
- 目錄保留:不會刪除源路徑中的空目錄,僅影響文件。
例如:
- 源目錄
/source/
包含:
/source/ ├── file1.txt ├── file2.txt └── subdir/ └── file3.txt
運行 rsync -av --remove-source-files /source/ /dest/
后:
/dest/
包含所有文件。/source/
變?yōu)椋?/li>
/source/ └── subdir/
- 文件被刪除,但目錄結構保留。
七、注意事項
謹慎使用:
--remove-source-files
會永久刪除源文件,操作前建議備份或測試。- 可先用
--dry-run
模擬運行,檢查結果:rsync -av --remove-source-files --dry-run /source/ /dest/
。
磁盤空間:
- 確保目標路徑有足夠空間,否則同步失敗,源文件不會刪除。
日志重要性:
- 日志記錄了刪除和同步的細節(jié),若出現(xiàn)問題,可快速定位。
權限問題:
- 源文件刪除需要寫權限,目標路徑寫入需要相應權限。
網(wǎng)絡中斷:
- 遠程同步時,若中斷,
rsync
支持續(xù)傳,未完成的文件不會刪除。
八、高級用法
- 限制帶寬:避免影響網(wǎng)絡,添加
--bwlimit=1000
(1MB/s)。
定時任務:結合cron,每天凌晨2點移動文件:
0 2 * * * nohup rsync -av --remove-source-files /source/ /dest/ > /var/log/rsync_$(date +\%Y\%m\%d_\%H\%M\%S).log 2>&1 &
錯誤通知:添加失敗提示:
nohup rsync -av --remove-source-files /source/ /dest/ > /var/log/rsync_$(date +%Y%m%d_%H%M%S).log 2>&1 || echo "Rsync failed" | mail -s "Error" admin@example.com &
總結
通過 nohup
和 --remove-source-files
,我們可以安全、高效地將文件從一處移動到另一處,并利用日志記錄整個過程。
這一方法在數(shù)據(jù)遷移、清理舊文件等場景中尤為實用。只要注意權限、空間和備份,就能充分發(fā)揮其優(yōu)勢。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
OneinStack一鍵安裝PHP/JAVA/HHVM和超詳細的VPS手動安裝LNMP的方法
OneinStack一鍵工具提供多個Tomcat版本(Tomcat-8,Tomcat-7) 和多個JDK版本(JDK-1.8,JDK-1.7,JDK-1.6),支持CentOS 6、7下HHVM安裝。如果還有為無法成功配置好Java或者HHVM環(huán)境而煩惱的話,OneinStack就可以助你一臂之力2017-07-07Unix/Linux系統(tǒng)下的nobody用戶與nologin詳細介紹
linux系統(tǒng)下的nobody用戶是什么用戶,nologin又是什么?本文為大家詳細介紹了這兩個no字輩2018-10-10VirtualBox 未指定要bridged的網(wǎng)絡界面的解決辦法
這篇文章主要介紹了VirtualBox 未指定要bridged的網(wǎng)絡界面的解決辦法的相關資料,希望通過本文能幫助到大家,讓大家解決遇到這樣的問題,需要的朋友可以參考下2017-10-10linux安裝jdk,tomcat 配置vsftp遠程連接的步驟
這篇文章主要介紹了linux安裝jdk,tomcat 配置vsftp遠程連接,需要的朋友可以參考下2015-04-04