Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> 關於 Linux

Shell 腳本監控 rsync 大檔傳輸完整性:自動檢測中斷並續傳

編輯:關於 Linux

rsync 傳輸大量檔案時若中斷無人值守,需自動化監控腳本定期檢查目標目錄大小與 rsync 進程狀態,若發現進程消失且檔案未傳完則自動重啟傳輸。本文提供一個簡易監控腳本邏輯並分析其侷限性。

rsync 監控流程示意圖

監控腳本 monitor_rsync.sh

#!/bin/bash
# 目標目錄預期大小 (MB) - 需依實際來源調整
EXPECTED_SIZE=11517
TARGET_DIR="/var/www/vhosts/"
RSYNC_SCRIPT="/root/rsync.sh"

# 取得目前目錄大小 (MB)
current_size=$(du -sm "${TARGET_DIR}" | awk '{print $1}')

# 檢查 rsync 進程數
rsync_count=$(ps -C rsync --no-header | wc -l)

if [ "${current_size}" -eq "${EXPECTED_SIZE}" ]; then
  echo "Files downloaded completely!"
  exit 0
fi

if [ "${rsync_count}" -eq 1 ]; then
  echo "rsync is running..."
else
  echo "rsync stopped, restarting..."
  # 強制殺掉可能殘留的進程
  pkill -9 rsync
  sleep 1
  # 背景重啟傳輸腳本
  nohup sh "${RSYNC_SCRIPT}" &
fi

rsync.sh 傳輸腳本範例

#!/bin/bash
rsync -avz --progress --partial \
  user@source-server:/var/www/vhosts/ \
  /var/www/vhosts/

部署方式

chmod +x monitor_rsync.sh rsync.sh
# 加入 crontab 每 5 分鐘檢查一次
*/5 * * * * /root/monitor_rsync.sh >> /var/log/rsync_monitor.log 2>&1

已知侷限與改進方向

  • 僵屍進程無法偵測:ps -C rsync 仍會計入僵屍進程,建議改用 pgrep -x rsync 搭配 ps -o stat= -p PID 過濾 Z 狀態
  • 檔案大小比對不精確:來源端檔案若持續變動,預期大小需動態獲取 (如 ssh source "du -sm /path")
  • 無檢查和完整性:建議傳輸完成後執行 rsync -avz --checksum --dry-run 驗證
  • 更健壯方案:使用 systemd 服務單元管理 rsync、或採用 lsyncd (即時同步守護程式)
Copyright © Windows教程網 All Rights Reserved