类别:Linux / 日期:2025-12-30 / 浏览:24 / 评论:0
需求:
CentOS7使用lftp和gzip自动压缩并备份本地文件到本地目录并上传到远程ftp服务器,端口为:2121,本地的备份文件保留60天,每天00:01开始备份
操作:
以下是一个完整的解决方案,使用Shell脚本配合lftp和gzip实现自动备份和清理:
安装必要工具
yum install -y lftp gzip
创建备份脚本
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设置脚本权限
chmod +x /opt/backup/backup_script.sh
配置定时任务
编辑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 {} \;使用密码文件(更安全的方式)
创建密码文件 /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
注意事项:
安全:确保脚本和配置文件权限适当(600)
测试:首次运行前手动测试脚本
磁盘空间:监控备份目录的磁盘使用情况
网络:确保FTP服务器可达
日志:定期检查备份日志确认任务正常运行
使用 crontab -l 可以查看已配置的定时任务,systemctl status crond 查看cron服务状态。警告部分
日志中会出到一条以下的警告:tar: 从成员名中删除开头的“/”
这是因为在tar压缩命令中使用了相对路径造成的,不影响正常备份。如果想忽略此警告,需要用到绝对路径:
tar -czf "$BACKUP_FILE" -C / opt/backup/data 2>> "$LOG_FILE"
但如果不影响正常运行,不必要修改。
