对于个人站长来说,虽然 Activiti 这样的专业工作流引擎功能强大,但日常的 VPS 管理和网站维护,更需要简单、可靠的基础设施级别自动化工作流。其中最重要的工作流之一就是定时自动备份。
本教程将指导您如何利用 Linux VPS 环境下的 Shell 脚本和 Cron 服务,建立一个集数据转储、文件归档、压缩和旧备份清理于一体的自动化备份“工作流”。
步骤一:准备备份目录
首先,确保您的 VPS 上有一个专门用于存储备份文件的目录。为了安全和权限考虑,通常放在 /home 或 /opt 下。
mkdir -p /home/backups
步骤二:创建自动化备份脚本
创建一个名为 backup_workflow.sh 的脚本文件,并赋予执行权限。该脚本定义了四个核心工作流步骤:数据库转储、文件归档、压缩打包和过期清理。
nano /opt/backup_workflow.sh
chmod +x /opt/backup_workflow.sh
将以下代码粘贴到脚本中,并根据您的实际网站和数据库信息修改配置部分:
#!/bin/bash
# VPS Automated Backup Workflow Script
# --- 配置区 (请根据您的网站信息修改) ---
BACKUP_ROOT="/home/backups" # 备份文件存储根目录
SITE_DIR="/var/www/html/mysite" # 您的网站根目录
DB_NAME="mywebsite_db" # 数据库名称
DB_USER="backup_user" # 数据库用户名
DB_PASS="secure_password_123" # 数据库密码 (请确保此用户只有SELECT权限)
RETENTION_DAYS=7 # 备份保留天数 (超过此天数的备份将被清理)
DATE=$(date +%Y%m%d_%H%M%S)
# 创建本次备份的临时目录
BACKUP_TEMP_DIR="${BACKUP_ROOT}/temp_${DATE}"
mkdir -p "${BACKUP_TEMP_DIR}/files"
echo "--- 启动备份工作流: ${DATE} ---"
# 1. 数据库转储 (Workflow Step 1)
echo "[1/4] 转储数据库 ${DB_NAME}..."
if ! mysqldump -u"${DB_USER}" -p"${DB_PASS}" "${DB_NAME}" > "${BACKUP_TEMP_DIR}/${DB_NAME}.sql"; then
echo "ERROR: 数据库转储失败,请检查配置和数据库状态!"
exit 1
fi
# 2. 文件归档 (Workflow Step 2)
echo "[2/4] 归档网站文件..."
# 排除不需要备份的大文件或缓存,这里采用简单的拷贝
if ! cp -r "${SITE_DIR}"/* "${BACKUP_TEMP_DIR}/files/"; then
echo "WARNING: 文件归档可能不完整,请检查源目录权限。"
fi
# 3. 压缩打包 (Workflow Step 3)
TAR_FILE="${BACKUP_ROOT}/site_backup_${DATE}.tar.gz"
echo "[3/4] 压缩备份目录到 ${TAR_FILE}..."
# 使用 -C 切换到父目录进行压缩,避免路径冗余
if ! tar -czf "${TAR_FILE}" -C "${BACKUP_ROOT}" "$(basename "${BACKUP_TEMP_DIR}")"; then
echo "ERROR: 压缩失败!"
# 即使压缩失败,也尝试清理临时目录
fi
# 清理临时目录
rm -rf "${BACKUP_TEMP_DIR}"
# 4. 清理旧备份 (Workflow Step 4 - Retention Policy)
echo "[4/4] 清理超过 ${RETENTION_DAYS} 天的旧备份..."
find "${BACKUP_ROOT}" -maxdepth 1 -type f -name "site_backup_*.tar.gz" -mtime +"${RETENTION_DAYS}" -delete
echo "--- 工作流成功完成。文件路径: ${TAR_FILE} ---"
步骤三:使用 Crontab 调度工作流
为了让这个备份工作流自动化执行,我们需要使用 Linux 的 Cron 服务进行调度。假设我们希望每天凌晨 3:00 执行一次备份。
编辑 Crontab:
crontab -e
在打开的编辑器中,添加以下一行内容:
# 每天凌晨 3 点执行备份工作流,并将执行日志重定向到文件
0 3 * * * /opt/backup_workflow.sh >> /var/log/backup_workflow.log 2>&1
说明:
* 0 3 * * ***: 表示在每小时的第 0 分钟(即整点)、每天的第 3 小时(即凌晨 3 点)、每月中的每一天、每年中的每一个月、每周的每一天都执行。
* **>> /var/log/backup_workflow.log 2>&1: 将脚本的所有标准输出和错误输出追加写入到日志文件中,方便后续故障排查和工作流状态监控。
配置完成后,您无需手动干预,您的 VPS 将每天自动执行这个包含四个步骤的备份和清理工作流,极大地提高了网站维护的效率和数据安全性。
汤不热吧