#!/bin/sh # Add log redirection for all output exec 1>>/var/log/cron.backupdb.log 2>&1 # Add timestamp to log entry echo "=== Backup started at $(date '+%Y-%m-%d %H:%M:%S') ===" # Set variables TIMESTAMP=$(date +%Y%m%d_%H%M%S) DB_LIST="qvyun postgres" # Replace with your database names POSTGRES_DIR="/opt/services/postgres" BACKUP_DIR="${POSTGRES_DIR}/data/backups" # Create backup directory if not exists # 如果 BACKUP_DIR 存在则不创建,否则创建 [ -d $BACKUP_DIR ] || mkdir -p $BACKUP_DIR # Create temp directory for dumps TEMP_DIR="${BACKUP_DIR}/temp_${TIMESTAMP}" mkdir -p $TEMP_DIR # Enhance logging for database backup cd $POSTGRES_DIR || { echo "[$(date '+%Y-%m-%d %H:%M:%S')] Failed to change directory to $POSTGRES_DIR"G exit 1 } for DB_NAME in $DB_LIST; do echo "[$(date '+%Y-%m-%d %H:%M:%S')] Backing up database: $DB_NAME" docker compose exec -T pg pg_dump -U postgres -w -Fc "$DB_NAME" -f "/var/lib/postgresql/data/backups/temp_${TIMESTAMP}/${DB_NAME}.dump" if [ $? -eq 0 ]; then echo "[$(date '+%Y-%m-%d %H:%M:%S')] Successfully backed up $DB_NAME" else echo "[$(date '+%Y-%m-%d %H:%M:%S')] Error backing up $DB_NAME" fi done # Return to backup directory for zip operation cd $BACKUP_DIR || { echo "[$(date '+%Y-%m-%d %H:%M:%S')] Failed to change directory to $BACKUP_DIR" exit 1 } # Create zip archive cd $BACKUP_DIR zip -r "postgres_backup_${TIMESTAMP}.zip" "temp_${TIMESTAMP}" # Cleanup temp directory rm -rf $TEMP_DIR # Upload to Aliyun OSS rclone sync --update /opt/services/postgres/data/backups/ alioss:/rogee-backups/server/ali/bj01/backups echo "[$(date '+%Y-%m-%d %H:%M:%S')] Backup completed: postgres_backup_${TIMESTAMP}.zip" echo "=== Backup finished at $(date '+%Y-%m-%d %H:%M:%S') ==="