Linux自用自动备份
Neil
[up主专用,视频内嵌代码贴在这]
Linux 自动备份
时间校准
注意:血的教训告诉我勿在备份的时候校准服务器的时间,以免造成异常的备份失效。
设置服务器时区
1 2 3 4 5 6 7 8
| timedatectl
timedatectl set-timezone Asia/Shanghai
date
|
1 2
| touch sync_time.sh nano sync_time.sh
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| #!/bin/bash
LOG_FILE="/var/log/time_sync.log"
echo "===== $(date '+%Y-%m-%d %H:%M:%S %Z') =====" >> "$LOG_FILE"
if command -v chronyc &> /dev/null; then chronyc -a makestep >> "$LOG_FILE" 2>&1 elif command -v ntpdate &> /dev/null; then ntpdate pool.ntp.org >> "$LOG_FILE" 2>&1 else echo "ERROR: Neither chrony nor ntpdate is installed!" >> "$LOG_FILE" exit 1 fi
hwclock -w >> "$LOG_FILE" 2>&1
|
添加可执行权限,并创建 cron 定时任务。每天0358执行此脚本。
1 2
| chmod +x sync_time.sh crontab -e
|
添加 cron
1
| 58 3 * * * /root/sync_time.sh
|
R5S
自动备份docker compose 和 当前的映射卷,创建 cron 定时任务。此备份将在每周一凌晨六时执行,并且储存一个月以内的备份。
1 2
| touch backup_script.sh nano backup_script.sh
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| #!/bin/bash
BACKUP_DIR="/ssd/backup" SOURCE_FOLDER1="/root/app-data" SOURCE_FILES=("/root/docker-compose.yml" "/root/docker-compose.yaml") DATE_FORMAT=$(date +"%y%m%d-R5S") BACKUP_NAME="backup_$DATE_FORMAT.tar.gz" LOG_FILE="/var/log/backup_script.log"
mkdir -p "$BACKUP_DIR"
echo "$(date '+%Y-%m-%d %H:%M:%S') - 开始备份..." >> "$LOG_FILE"
FILES_TO_BACKUP=("$SOURCE_FOLDER1") for file in "${SOURCE_FILES[@]}"; do if [ -f "$file" ]; then FILES_TO_BACKUP+=("$file") fi done
tar -czf "$BACKUP_DIR/$BACKUP_NAME" "${FILES_TO_BACKUP[@]}" 2>> "$LOG_FILE"
if [ $? -eq 0 ]; then echo "$(date '+%Y-%m-%d %H:%M:%S') - 备份成功: $BACKUP_NAME" >> "$LOG_FILE" else echo "$(date '+%Y-%m-%d %H:%M:%S') - 备份失败!" >> "$LOG_FILE" exit 1 fi
echo "$(date '+%Y-%m-%d %H:%M:%S') - 清理旧备份..." >> "$LOG_FILE" find "$BACKUP_DIR" -name "backup_*.tar.gz" -mtime +30 -delete 2>> "$LOG_FILE" echo "$(date '+%Y-%m-%d %H:%M:%S') - 清理完成" >> "$LOG_FILE"
|
1 2 3 4
| chmod +x backup_script.sh crontab -e
0 6 * * 1 /root/backup_script.sh
|