Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學

Linux 定時備份文件至遠程 FTP 並自動清理舊備份

編輯:Linux 系統常見問題解答

場景需求

  • 源目錄:/backup/oracledata/ts
  • 本地備份目錄:/backup/oracledata/tsbak
  • 備份文件名:TianShan_YYYYMMDD.tar.gz
  • 保留策略:本地與遠程 FTP 僅保留最近 7 天備份。
  • FTP 服務器:192.168.148.121,用戶 dell,密碼 123,遠程目錄 /oraclebackup。

完整備份腳本 tianshanftp.sh


#!/bin/bash
# 配置區
FTP_IP="192.168.148.121"
FTP_USER="dell"
FTP_PASS="123"
FTP_BACKUP_DIR="/oraclebackup"
BK_DR="/backup/oracledata/tsbak"
DB_DR="/backup/oracledata/ts"
DAYS=7
LINUX_USER="root"

DATE=$(date +%Y%m%d)
DEL_DATE=$(date -d "-${DAYS} day" +%Y%m%d)

# 1. 打包壓縮
tar zcf "${BK_DR}/TianShan${DATE}.tar.gz" -C "${DB_DR}" .

# 2. 修正權限
chown -R "${LINUX_USER}:${LINUX_USER}" "${BK_DR}"

# 3. 本地清理舊備份
find "${BK_DR}" -name "TianShan*.tar.gz" -type f -mtime +${DAYS} -exec rm -f {} \;

# 4. FTP 上傳並清理遠程舊備份
ftp -n -v "${FTP_IP}" << EOF
user ${FTP_USER} ${FTP_PASS}
binary
cd ${FTP_BACKUP_DIR}
lcd ${BK_DR}
put TianShan${DATE}.tar.gz
delete TianShan${DEL_DATE}.tar.gz
bye
EOF

關鍵點解析

  • tar zcf:z gzip 壓縮,c 創建,f 文件。-C 切換目錄避免絕對路徑包含在壓縮包中。
  • find ... -mtime +7:修改時間超過 7 天 (即 8 天前) 的文件。-exec rm -f {} \; 安全刪除。
  • ftp -n:禁用自動登錄;-v 顯示過程。Here Document (<< EOF) 非交互式批量發送命令。
  • date -d "-7 day":GNU date 計算 7 天前日期,兼容性良好。

部署定時任務


# 1. 賦予執行權限
chmod +x /backup/oracledata/tsbak/tianshanftp.sh

# 2. 編輯 crontab (root)
crontab -e
# 每天凌晨 2:05 執行,日志輸出至文件
5 2 * * * /backup/oracledata/tsbak/tianshanftp.sh >> /backup/oracledata/tsbak/mylog.log 2>&1

# 3. 重啟 cron 服務 (如有修改系統級 crontab)
systemctl restart crond

恢復操作


# 解壓指定日期備份
tar zxf TianShan20240409.tar.gz -C /restore/target/path

健壯性增強建議

  • 檢查 tar 返回碼,失敗時發送告警郵件/微信。
  • FTP 命令檢查返回碼,或改用 lftp/curl 支持錯誤處理。
  • 遠程目錄不存在時自動創建:mkdir -p ${FTP_BACKUP_DIR} (需 FTP 寫權限)。
  • 考慮使用 rsync over ssh 替代 FTP,支持增量、斷點續傳、加密。
Copyright © Windows教程網 All Rights Reserved