备份脚本 backupGhost.sh

第一版 tar.gz

#!/bin/sh

# 输出压缩包 ghost20250522103006.tar.gz 522MB
sudo tar -czvPf ghost`date +"%Y%m%d%H%M%S"`.tar.gz /home/ghost/backupGhost.sh /www

第二版

#!/bin/bash

# 设置备份目录和文件名
BACKUP_DIR="/home/ghost"
BACKUP_FILE="$BACKUP_DIR/ghost$(date +'%Y%m%d%H%M%S').tar.bz2"

# 检查bzip2是否可用
if ! command -v bzip2 >/dev/null 2>&1; then
    echo "Error: bzip2 not installed. Please install it or use gzip."
    exit 1
fi

# 开始备份,排除日志、缓存、临时文件和.well-known目录
echo "Starting backup to $BACKUP_FILE"
# 使用zstd压缩,排除日志和缓存目录 输出压缩包 ghost_20250522105407.tar.bz2  467MB,如果去掉exclude为492MB 收益有限
tar --exclude='*/logs/*' --exclude='*/cache/*' --exclude='*/tmp/*' -I zstd -cvf "$BACKUP_FILE" /home/ghost/backupGhost.sh /www
if [ $? -eq 0 ]; then
    echo "Backup created: $BACKUP_FILE"
else
    echo "Backup failed"
    exit 1
fi

# 验证备份文件
bzip2 -t "$BACKUP_FILE" >/dev/null 2>&1
if [ $? -eq 0 ]; then
    echo "Backup file verified"
else
    echo "Backup file corrupted"
    exit 1
fi

第三版 自动化

#!/bin/bash

# 设置备份目录和远程目标
BACKUP_DIR="/home/ghost/backups"
REMOTE_HOST="user@remote_host:/path/to/destination"
LOG_FILE="/home/ghost/backups/backup.log"
TELEGRAM_BOT_TOKEN="your_bot_token"
TELEGRAM_CHAT_ID="your_chat_id"

# 创建备份目录
mkdir -p "$BACKUP_DIR"

# 日志函数
log() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE"
}

# 开始备份
log "Starting backup"
BACKUP_FILE="$BACKUP_DIR/ghost_$(date +'%Y%m%d%H%M%S').tar.zst"

# 使用zstd压缩,排除日志和缓存目录
tar --exclude='*/logs/*' --exclude='*/cache/*' --exclude='*/tmp/*' -I zstd -cvf "$BACKUP_FILE" /home/ghost/backupGhost.sh /www
if [ $? -eq 0 ]; then
    log "Backup created: $BACKUP_FILE"
else
    log "Backup failed"
    curl -s -X POST "https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/sendMessage" -d chat_id="$TELEGRAM_CHAT_ID" -d text="Backup failed: $(date)"
    exit 1
fi

# 验证备份文件
zstd -t "$BACKUP_FILE" >/dev/null 2>&1
if [ $? -eq 0 ]; then
    log "Backup file verified"
else
    log "Backup file corrupted"
    curl -s -X POST "https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/sendMessage" -d chat_id="$TELEGRAM_CHAT_ID" -d text="Backup corrupted: $(date)"
    exit 1
fi

# 传输到远程服务器
scp "$BACKUP_FILE" "$REMOTE_HOST"
if [ $? -eq 0 ]; then
    log "Backup transferred to $REMOTE_HOST"
    curl -s -X POST "https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/sendMessage" -d chat_id="$TELEGRAM_CHAT_ID" -d text="Backup completed and transferred: $(date)"
else
    log "Transfer failed"
    curl -s -X POST "https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/sendMessage" -d chat_id="$TELEGRAM_CHAT_ID" -d text="Backup transfer failed: $(date)"
    exit 1
fi

# 清理7天前的备份
find "$BACKUP_DIR" -name "ghost_*.tar.zst" -mtime +7 -delete
log "Cleaned up backups older than 7 days"