本文目录导读:

我来帮你编写一个定时任务备份脚本,以下是几种常见场景的备份脚本示例:
文件/目录备份脚本
Linux Bash 脚本
#!/bin/bash
# 备份脚本 - backup.sh
# 配置参数
BACKUP_SRC="/path/to/source" # 要备份的源目录
BACKUP_DST="/path/to/backup" # 备份存放目录
BACKUP_NAME="backup_$(date +%Y%m%d_%H%M%S)"
MAX_BACKUPS=30 # 最大保留备份数
LOG_FILE="/var/log/backup.log"
# 创建备份目录
mkdir -p "$BACKUP_DST"
# 执行备份
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Starting backup..." >> "$LOG_FILE"
# 使用tar压缩备份
tar -czf "$BACKUP_DST/$BACKUP_NAME.tar.gz" -C "$(dirname "$BACKUP_SRC")" "$(basename "$BACKUP_SRC")" 2>> "$LOG_FILE"
if [ $? -eq 0 ]; then
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Backup completed: $BACKUP_NAME.tar.gz" >> "$LOG_FILE"
else
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Backup failed!" >> "$LOG_FILE"
exit 1
fi
# 清理旧备份,保留最近MAX_BACKUPS个
cd "$BACKUP_DST"
ls -t *.tar.gz 2>/dev/null | tail -n +$((MAX_BACKUPS + 1)) | xargs -r rm -f
# 删除超过30天的备份
find "$BACKUP_DST" -name "*.tar.gz" -mtime +30 -delete
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Cleanup completed" >> "$LOG_FILE"
设置执行权限
chmod +x backup.sh
数据库备份脚本
MySQL 备份
#!/bin/bash
# MySQL备份脚本 - mysql_backup.sh
# 数据库配置
DB_USER="root"
DB_PASSWORD="your_password"
DB_NAME="your_database"
BACKUP_DIR="/var/backups/mysql"
RETENTION_DAYS=7
# 创建备份目录
mkdir -p "$BACKUP_DIR"
# 生成备份文件名
BACKUP_FILE="$BACKUP_DIR/${DB_NAME}_$(date +%Y%m%d_%H%M%S).sql.gz"
# 执行备份
echo "[$(date)] Starting MySQL backup..."
mysqldump -u"$DB_USER" -p"$DB_PASSWORD" "$DB_NAME" | gzip > "$BACKUP_FILE"
if [ $? -eq 0 ]; then
echo "[$(date)] MySQL backup completed: $BACKUP_FILE"
# 删除过期备份
find "$BACKUP_DIR" -name "*.sql.gz" -mtime +$RETENTION_DAYS -delete
else
echo "[$(date)] MySQL backup failed!"
exit 1
fi
PostgreSQL 备份
#!/bin/bash # PostgreSQL备份脚本 - pg_backup.sh PG_USER="postgres" PG_DATABASE="your_database" BACKUP_DIR="/var/backups/postgresql" # 执行备份 pg_dump -U "$PG_USER" "$PG_DATABASE" | gzip > "$BACKUP_DIR/pg_$(date +%Y%m%d_%H%M%S).sql.gz" # 保留最近30天的备份 find "$BACKUP_DIR" -name "*.sql.gz" -mtime +30 -delete
创建定时任务 (Crontab)
编辑crontab
crontab -e
常用定时任务示例
# 每天凌晨2:00执行备份 0 2 * * * /path/to/backup.sh # 每小时执行一次 0 * * * * /path/to/backup.sh # 每周日凌晨3:00执行 0 3 * * 0 /path/to/backup.sh # 每月1号凌晨4:00执行 0 4 1 * * /path/to/backup.sh # 每30分钟执行一次 */30 * * * * /path/to/backup.sh # 每天8:00和18:00执行 0 8,18 * * * /path/to/backup.sh
Crontab格式说明
分钟(0-59) 小时(0-23) 日(1-31) 月(1-12) 星期(0-7) 命令
高级备份脚本(带邮件通知)
#!/bin/bash
# 高级备份脚本 - advanced_backup.sh
# 配置
BACKUP_SOURCES=("/var/www" "/etc" "/home/user/Documents")
BACKUP_DIR="/var/backups/system"
EMAIL="admin@example.com"
DATE=$(date +%Y%m%d_%H%M%S)
HOSTNAME=$(hostname)
# 邮件通知函数
notify() {
local status=$1
local message=$2
echo "$message" | mail -s "[Backup] $HOSTNAME - $status" "$EMAIL"
}
# 开始备份
echo "Starting backup on $HOSTNAME at $(date)"
for src in "${BACKUP_SOURCES[@]}"; do
# 获取目录名
dir_name=$(basename "$src")
backup_file="$BACKUP_DIR/${dir_name}_${DATE}.tar.gz"
# 执行备份
if tar -czf "$backup_file" "$src" 2>/dev/null; then
echo "Backup successful: $backup_file"
# 创建校验和
md5sum "$backup_file" > "${backup_file}.md5"
else
notify "FAILED" "Backup failed for $src"
exit 1
fi
done
# 删除7天前的备份
find "$BACKUP_DIR" -name "*.tar.gz" -mtime +7 -delete
find "$BACKUP_DIR" -name "*.md5" -mtime +7 -delete
# 发送成功通知
notify "SUCCESS" "Backup completed successfully on $HOSTNAME at $(date)"
echo "Backup completed at $(date)"
使用 systemd 定时器(Linux)
创建服务文件 /etc/systemd/system/backup.service
[Unit] Description=System Backup Service [Service] Type=oneshot ExecStart=/path/to/backup.sh User=root
创建定时器文件 /etc/systemd/system/backup.timer
[Unit] Description=Run Backup Daily [Timer] OnCalendar=daily Persistent=true [Install] WantedBy=timers.target
启用定时器
systemctl daemon-reload systemctl enable backup.timer systemctl start backup.timer
使用建议
- 测试脚本:先手动运行测试
- 检查权限:确保有读写权限
- 监控日志:检查备份日志确认成功
- 定期验证:测试恢复备份文件
- 异地备份:考虑远程备份方案
需要我帮你写特定场景的备份脚本吗?
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播