类别:Linux / 日期:2025-12-30 / 浏览:24 / 评论:0

需求:
CentOS7使用lftp和gzip自动压缩并备份本地文件到本地目录并上传到远程ftp服务器,端口为:2121,本地的备份文件保留60天,每天00:01开始备份

操作:

以下是一个完整的解决方案,使用Shell脚本配合lftp和gzip实现自动备份和清理:

  1. 安装必要工具

    yum install -y lftp gzip
  2. 创建备份脚本
    vi /opt/backup/backup_script.sh
    脚本内容:

    #!/bin/bash
    
    # 配置文件
    BACKUP_DIR="/opt/backup/data"	# 本地备份保存位置
    LOG_FILE="/opt/backup/backup.log"	# 日志
    SOURCE_DIR="/path/to/source"  # 需要备份的源目录
    FTP_HOST="ftp.example.com"	# 远程服务器名
    FTP_PORT="2121"	# 修改端口号
    FTP_USER="username"
    FTP_PASS="password"
    FTP_DIR="/backup"	# 远程备份保存目录
    RETENTION_DAYS=60	# 保留60天
    BACKUP_PREFIX="backup_$(date +%Y%m%d_%H%M%S)"	#备份文件名
    
    # 创建必要的目录
    mkdir -p $BACKUP_DIR
    mkdir -p $(dirname $LOG_FILE)
    
    # 记录日志函数
    log() {
        echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1" >> $LOG_FILE
    }
    
    # 清理旧备份函数
    cleanup_old_backups() {
        log "清理本地旧备份..."
    
        # 清理本地备份
        find $BACKUP_DIR -name "backup_*.tar.gz" -mtime +$RETENTION_DAYS -delete 2>> $LOG_FILE
    }
    
    # 开始备份
    log "========== 备份开始 =========="
    
    # 1. 压缩源目录
    BACKUP_FILE="$BACKUP_DIR/${BACKUP_PREFIX}.tar.gz"
    log "正在压缩: $SOURCE_DIR"
    
    # 检查源目录是否存在
    if [ ! -d "$SOURCE_DIR" ]; then
        log "错误:源目录 $SOURCE_DIR 不存在!"
        exit 1
    fi
    
    tar -czf $BACKUP_FILE $SOURCE_DIR 2>> $LOG_FILE
    
    if [ $? -eq 0 ]; then
        if [ -f $BACKUP_FILE ]; then
            file_size=$(du -h $BACKUP_FILE 2>/dev/null | cut -f1)
            log "压缩完成,文件大小: $file_size"
        else
            log "压缩完成"
        fi
    else
        log "压缩失败!"
        exit 1
    fi
    
    # 2. 上传到FTP服务器
    log "正在上传到FTP服务器..."
    lftp -u $FTP_USER,$FTP_PASS -p $FTP_PORT $FTP_HOST <<EOF 2>> $LOG_FILE
    cd $FTP_DIR
    put $BACKUP_FILE
    bye
    EOF
    
    if [ $? -eq 0 ]; then
        log "上传成功: ${BACKUP_PREFIX}.tar.gz"
    else
        log "上传失败!"
    fi
    
    # 3. 清理旧备份
    cleanup_old_backups
    
    log "========== 备份完成 =========="
    echo "" >> $LOG_FILE
  3. 设置脚本权限

    chmod +x /opt/backup/backup_script.sh
  4. 配置定时任务
    编辑crontab:
    crontab -e
    添加以下内容:

    # 每天00:01执行备份
    1 0 * * * /opt/backup/backup_script.sh
    
    # 可选:每周一清理日志文件(保留30天)
    0 2 * * 1 find /opt/backup/backup.log -mtime +30 -exec truncate -s 0 {} \;
  5. 使用密码文件(更安全的方式)
    创建密码文件 /opt/backup/ftp_pass.txt:

    # 格式:ftp://username:password@ftp.example.com:端口
    ftp://username:password@ftp.example.com:2121

    设置密码文件权限:

    chmod 600 /opt/backup/ftp_pass.txt
    修改脚本中的lftp命令部分:

    # 修改上传部分
    lftp -f /opt/backup/ftp_pass.txt <<EOF
    cd $FTP_DIR
    put $BACKUP_FILE
    bye
    EOF
    
    # 修改清理部分的lftp命令
    lftp -f /opt/backup/ftp_pass.txt <<EOF
    ...
    EOF
  6. 注意事项:

    安全:确保脚本和配置文件权限适当(600)
    测试:首次运行前手动测试脚本
    磁盘空间:监控备份目录的磁盘使用情况
    网络:确保FTP服务器可达
    日志:定期检查备份日志确认任务正常运行
    使用 crontab -l 可以查看已配置的定时任务,systemctl status crond 查看cron服务状态。

  7. 警告部分

    日志中会出到一条以下的警告:tar: 从成员名中删除开头的“/”
    这是因为在tar压缩命令中使用了相对路径造成的,不影响正常备份。如果想忽略此警告,需要用到绝对路径:
    tar -czf "$BACKUP_FILE" -C / opt/backup/data 2>> "$LOG_FILE"
    但如果不影响正常运行,不必要修改。

打赏

感谢您的赞助~

打开支付宝扫一扫,即可进行扫码打赏哦~

版权声明 : 本文未使用任何知识共享协议授权,您可以任何形式自由转载或使用。

 可能感兴趣的文章