Spaces:
Running
Running
| # pg_backup.sh — Backup periódico do PostgreSQL → HF Dataset | |
| # Executa a cada 2 horas via cron ou background loop | |
| set -e | |
| BACKUP_DIR="/akira/data/cloud_sync" | |
| BACKUP_FILE="$BACKUP_DIR/akira_dump.sql" | |
| DATASET_NAME="${HF_BACKUP_DATASET:-akira-db-backup}" | |
| SYNC_INTERVAL=${BACKUP_SYNC_INTERVAL:-7200} | |
| mkdir -p "$BACKUP_DIR" | |
| backup_pg() { | |
| echo "🔄 [BACKUP] Iniciando backup do PostgreSQL..." | |
| PGPASSWORD=akira pg_dump -h localhost -U akira -d akira \ | |
| --format=custom \ | |
| --compress=9 \ | |
| --file="$BACKUP_DIR/akira_dump.custom" 2>/dev/null | |
| PGPASSWORD=akira pg_dump -h localhost -U akira -d akira \ | |
| > "$BACKUP_FILE" 2>/dev/null | |
| if [ $? -eq 0 ]; then | |
| echo "✅ [BACKUP] Dump concluído: $(du -h $BACKUP_FILE | cut -f1)" | |
| # Upload para HF Dataset se HF_TOKEN estiver configurado | |
| if [ -n "$HF_TOKEN" ]; then | |
| echo "📤 [BACKUP] Enviando para HF Dataset: $DATASET_NAME" | |
| python3 -c " | |
| import os, sys | |
| from huggingface_hub import HfApi | |
| try: | |
| api = HfApi(token='$HF_TOKEN') | |
| repo_id = os.environ.get('HF_AUTHOR', 'akra35567') + '/' + '$DATASET_NAME' | |
| api.upload_folder( | |
| folder_path='$BACKUP_DIR', | |
| repo_id=repo_id, | |
| repo_type='dataset', | |
| allow_patterns=['akira_dump.*'], | |
| ) | |
| print('✅ [BACKUP] Upload concluído') | |
| except Exception as e: | |
| print(f'⚠️ [BACKUP] Upload falhou: {e}') | |
| " 2>/dev/null || echo "⚠️ [BACKUP] Upload pulado" | |
| fi | |
| else | |
| echo "❌ [BACKUP] Dump falhou" | |
| fi | |
| } | |
| restore_pg() { | |
| echo "📥 [RESTORE] Verificando backup para restaurar..." | |
| if [ -f "$BACKUP_FILE" ]; then | |
| echo "📥 [RESTORE] Restaurando backup..." | |
| PGPASSWORD=akira psql -h localhost -U akira -d akira -f "$BACKUP_FILE" 2>/dev/null | |
| echo "✅ [RESTORE] Concluído" | |
| elif [ -f "$BACKUP_DIR/akira_dump.custom" ]; then | |
| echo "📥 [RESTORE] Restaurando backup custom..." | |
| PGPASSWORD=akira pg_restore -h localhost -U akira -d akira "$BACKUP_DIR/akira_dump.custom" 2>/dev/null | |
| echo "✅ [RESTORE] Concluído" | |
| else | |
| echo "ℹ️ [RESTORE] Nenhum backup encontrado" | |
| fi | |
| } | |
| # Se chamado com argumento "restore" | |
| if [ "$1" = "restore" ]; then | |
| restore_pg | |
| exit 0 | |
| fi | |
| # Loop de backup periódico | |
| echo "⏱️ [BACKUP] Loop iniciado (intervalo: ${SYNC_INTERVAL}s)" | |
| while true; do | |
| backup_pg | |
| sleep $SYNC_INTERVAL | |
| done | |