---
# System prepended metadata

title: SyncRadarData
tags: [Radar Meteorology Lab]

---

# SyncRadarData

一個用於自動同步雷達資料到遠端NAS伺服器的 bash 腳本工具。

## 功能特色

- 自動同步指定雷達資料到遠端伺服器
- 支援 SSH 金鑰驗證，與SSH代理服務
- 智慧檔案過濾，只同步所需雷達資料
- 詳細的同步記錄檔
- 逾時同步保護機制

## 系統需求

- Linux 作業系統
- bash shell
- rsync
- ssh 和 ssh-agent
- SSH 金鑰對已建立

## 設定說明

### 1. 確認所需 SSH 金鑰是否存在？

確保您的 SSH 金鑰已存在：
```bash
# 預設金鑰檔案路徑（可變更）
~/.ssh/36_156_teamr
```

### 2. 建立(or重新建立) SSH Agent 環境檔案？

以下為預設的SSH Agent的環境檔案路徑：
```bash
# 檔案路徑（預設）
~/.ssh/ssh-agent.cf
```
代理服務可以減少密碼輸入頻率，但遇下列情況時，服務會被終止，環境檔案需要重新建立：
1. 資料傳輸電腦已關機重啟
2. WSL服務重啟(不含視窗關閉情況，視窗關閉後仍可背景運行)
```bash
# 環境檔案建立流程
cd ~/.ssh
ssh-agent -s | head -n 2 > ssh-agent.cf
source ssh-agent.cf
```

`ssh-agent.cf`此檔案內容應包含(PID會改變)：
```
SSH_AUTH_SOCK=/path/to/ssh/auth/socket
SSH_AGENT_PID=1234
```

### 3. 目錄結構設定

請確認以下目錄存在且可存取：

| 項目 | 預設路徑 | 說明 |
|------|----------|------|
| 來源目錄 | `/mnt/d/RADARDATA` | 雷達資料來源目錄 |
| 目標目錄 | `/share/CACHEDEV1_DATA/DATA/TEAMR/TEAM-R_2025/test` | 遠端目標目錄 |
| 記錄目錄 | `/mnt/d/SyncLogs` | 同步記錄檔儲存目錄 |

## 使用方法

### 基本執行

```bash
# 確保腳本有執行權限
chmod +x rsync.sh

# 執行同步(適用單次測試)
./rsync.sh
```

### 自動化排程執行 (Crontab)

此腳本設計為可與 crontab 搭配使用，實現自動化定時同步。

#### 1. 設定 Crontab

```bash
# 編輯 crontab
crontab -e
```

#### 2. 常用排程範例

```bash
# 每小時執行一次（整點執行）
0 * * * * /mnt/d/SyncRadarData/rsync.sh

# 每30分鐘執行一次
*/30 * * * * /mnt/d/SyncRadarData/rsync.sh

# 每天早上6點和晚上6點執行
0 6,18 * * * /mnt/d/SyncRadarData/rsync.sh

# 僅在工作日（週一到週五）每小時執行
0 * * * 1-5 /mnt/d/SyncRadarData/rsync.sh

# 每5分鐘執行一次（Real-time資料同步）
*/5 * * * * /mnt/d/SyncRadarData/rsync.sh
```

#### 3. 完整的 Crontab 範例

```bash
# 雷達資料同步 - 每5分鐘執行一次
*/5 * * * * /mnt/d/SyncRadarData/rsync.sh | logger -t CRON[sync]
```

#### 4. 檢查 Crontab 狀態

```bash
# 查看目前的 crontab 設定
crontab -l

# 檢查 crontab 服務狀態
sudo systemctl status cron

# 查看 crontab 執行記錄
tail -f /var/log/syslog | grep CRON
```

### 同步的檔案類型

腳本會同步以下類型的雷達資料：

- **product_raw**: `TMR*.RAW*` 檔案
- **RAW**: `X-Rock*.RAW*` 檔案  
- **UF**: `X-Rock*.RAW*.gz` 壓縮檔案
- **PPI**: `PPI*.jpg` 影像檔案
- **RHI**: `*.jpg` 影像檔案

### 記錄檔案

每次同步都會產生記錄檔，檔名格式為：
```
rsync_YYMMDDTHHmm.txt
```

例如：`rsync_250716T1430.txt`

## 配置參數

您可以修改腳本開頭的配置區段來調整設定：

```bash
# 來源目錄
SOURCE_DIR='/mnt/d/RADARDATA'

# 遠端目標目錄
TARGET_DIR='/share/CACHEDEV1_DATA/DATA/TEAMR/TEAM-R_2025/test'

# 記錄檔目錄
LOGGER_DIR='/mnt/d/SyncLogs'

# 遠端主機
HOST='RaMeLaNAS2'

# 使用者名稱
USER='teamr'

# SSH 金鑰路徑
KEY_PATH="$HOME/.ssh/36_156_teamr"

# SSH Agent 環境檔案
AGENT_ENV_FILE="$HOME/.ssh/ssh-agent.cf"
```

## 安全機制

1. **SSH Agent 檢查**: 確認 SSH Agent 程序正在執行
2. **金鑰驗證**: 檢查 SSH 金鑰是否已載入到 SSH Agent
3. **逾時保護**: rsync 操作設有 50 秒（可根據自動化時程彈性調整）逾時限制，防止連線卡死
4. **錯誤處理**: 各階段都有錯誤檢查和適當的錯誤訊息

### 逾時設定詳細說明

腳本使用 `timeout 50` 命令來限制 rsync 操作的執行時間：

```bash
timeout 50 rsync -ahizvP --append-verify --ignore-errors ...
```

**逾時機制的重要性：**

- **防止無限等待**: 避免因網路問題導致腳本無限期等待
- **資源保護**: 防止長時間佔用系統資源
- **自動化友善**: 適合用於定時任務或自動化流程

**調整逾時時間：**

根據您的資料量、網路環境 & 自動化排程，彈性調整逾時時間，例如：

```bash
# Real-time同步：小量資料或快速網路 (50秒逾時終止)
timeout 50 rsync ...

# Real-time同步：大量資料或慢速網路 (約5分鐘逾時終止)
timeout 299 rsync ...

# 整點執行：非常大的資料集 (約一小時逾時終止)
timeout 3590 rsync ...
```

**逾時發生時的行為：**

- rsync 程序會被強制終止
- 記錄檔會包含逾時相關的錯誤訊息
- 下次執行時會使用 `--append-verify` 續傳未完成的檔案

## 故障排除

### 常見問題

1. **Agent environment file not found**
   - 確認 `~/.ssh/ssh-agent.cf` 檔案存在
   - 檢查檔案權限

2. **ssh-agent with PID xxx is NOT running**
   - 重新啟動 ssh-agent
   - 更新建立 ssh-agent.cf 檔案

3. **Key file NOT found**
   - 確認 SSH 金鑰檔案路徑正確
   - 檢查檔案權限（建議 600）

4. **Key is NOT yet added to ssh-agent**
   - 手動將金鑰加入 ssh-agent：
     ```bash
     ssh-add ~/.ssh/36_156_teamr
     ```

5. **rsync 逾時問題**
   - 如果經常發生逾時，考慮增加逾時時間
   - 檢查網路連線品質
   - 確認目標伺服器回應正常
   - 可以分批同步大量檔案

6. **Crontab 相關問題**
   - **腳本在 crontab 中無法執行**：
     ```bash
     # 確認腳本權限
     chmod +x /mnt/d/SyncRadarData/rsync.sh
     
     # 使用絕對路徑
     */30 * * * * /mnt/d/SyncRadarData/rsync.sh
     ```
      
   - **檢查 crontab 執行記錄**：
     ```bash
     # 查看系統記錄
     grep CRON /var/log/syslog
     
     # 查看自訂記錄檔
     tail -f /mnt/d/SyncLogs/cron.log
     ```

## 注意事項

- 確保網路連接穩定
- 同步大量資料時可能需要較長時間，請適當調整逾時設定
- 建議在低網路使用量時期執行
- 定期檢查記錄檔以確認同步狀態
- 如果資料量很大，可考慮分批執行或增加逾時時間
- 逾時中斷的傳輸會在下次執行時自動續傳（thanks to `--append-verify`）

### Crontab 使用注意事項

- **頻率設定**: 根據雷達資料更新頻率合理設定同步間隔，避免過於頻繁
- **系統負載**: 注意同步時間不要與系統備份等其他重要任務衝突
- **記錄管理**: 定期清理記錄檔，避免佔用過多磁碟空間
- **錯誤處理**: 監控 crontab 執行狀況，及時處理異常情況
- **權限管理**: 確保 crontab 執行用戶有足夠權限存取所有必要的目錄和檔案

## 授權

此專案供「國立中央大學大氣科學系雷達氣象實驗室」內部使用，請遵守相關資料使用規範。
