第一版 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"