# 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 執行用戶有足夠權限存取所有必要的目錄和檔案 ## 授權 此專案供「國立中央大學大氣科學系雷達氣象實驗室」內部使用,請遵守相關資料使用規範。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up