Foros del Web » Administración de Sistemas » Unix / Linux »

script Bash para montar varias BDs

Estas en el tema de script Bash para montar varias BDs en el foro de Unix / Linux en Foros del Web. Se están trayendo respaldos de varios lugares, la idea es montarlos en una sola máquina. Son más de 50 respaldos por lo que creé un ...
  #1 (permalink)  
Antiguo 01/07/2008, 17:31
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 20 años, 3 meses
Puntos: 102
script Bash para montar varias BDs

Se están trayendo respaldos de varios lugares, la idea es montarlos en una sola máquina. Son más de 50 respaldos por lo que creé un script para hacer esta tarea.

La idea es que los respaldos tengan un mismo esquema variando solo el número de la BD. Tengo el siguiente código:
Código:
#!/bin/bash

echo 'INICIANDO SCRIPT'
USUARIO='mi_usuario' # El usuario que tendrá permisos sobre las BDs

DIRECTORIO=$1 # Donde se encuentran los archivos SQL de los respaldos. Se tiene que pasar como parámetro.

ARCHIVOS=($(ls -t $DIRECTORIO))
NUMARCHIVOS=${#ARCHIVOS[*]} # Calcula el número de archivos

INDICE=0
echo 'INICIANDO BUCLE'
while [ $INDICE -lt $NUMARCHIVOS ]; do
#echo ${ARCHIVOS[$INDICE]}
  if [[ ${ARCHIVOS[$INDICE]} =~ base([0-9]{2})(.*).pgdump ]] # Debe tener el formato baseXX-DD-MM-YYYY.pgdump
    then
         BASEDATOS='base'${BASH_REMATCH[1]} # El nombre de la Base de Datos
         echo '------------- INICIO '$BASEDATOS
         dropdb $BASEDATOS # Eliminando 'versiones' anteriores
         createdb -E LATIN1 -O $USUARIO $BASEDATOS # Creando...
         psql -U $USUARIO -d $BASEDATOS -f $1${ARCHIVOS[$INDICE]} # Montando la BD conrrespondiente
         psql -c "ALTER DATABASE $BASEDATOS SET DateStyle TO 'SQL, DMY'" # Cambiando el esquema de fechas
         mv $1${ARCHIVOS[$INDICE]} tmp/$1${ARCHIVOS[$INDICE]}
         echo $1${ARCHIVOS[$INDICE]}
         echo '----------------- FIN '$BASEDATOS
  fi

  let INDICE++
done
exit 0
el script debe de ser llamado: script.sh directorio/donde/estan/los/pgdumps/

Funciona: elimina, crea y monta los datos... pero hay un problema al intentar moverlos. Me aparece el siguiente mensaje de error:
Cita:
mv: no se puede mover �respaldos/junio2008/base12_10-06-08.pgdump� a �tmp/respaldos/junio2008/base12_10-06-08.pgdump�: No existe el fichero o el directorio
... con todo y esos símbolos. El directorio tmp/ esta en el mismo nivel donde se encuentra el script. Los archivos y el directorio tienen permisos 777.

¿Por qué aparecen dichos símbolos?. Agradezco cualquier comentario u observación sobre mi script (apenas me adentro en Bash por esto). Estoy trabajando con Postgres 8.2.



PD: ¿será posible ejecutar los archivos en órden?.. que ahora los hace salteados; base09, base50, base12, etc.., preferiría fuera base01, base02, base03... etc.
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #2 (permalink)  
Antiguo 02/07/2008, 09:03
Avatar de Koveart
Colaborador
 
Fecha de Ingreso: julio-2002
Ubicación: Colombia
Mensajes: 4.407
Antigüedad: 22 años, 3 meses
Puntos: 29
Respuesta: script Bash para montar varias BDs

¿Has probado a depurar el codigo a ver que contienen esas variables que quieres mover? ¿Estan bien configurados los Locales?

saludos
__________________
“Los soñadores no existen, se lo dice un soñador que ha tenido el privilegio de ver realidades que ni siquiera fue capaz de soñar”
  #3 (permalink)  
Antiguo 02/07/2008, 23:08
Avatar de AleSanchez
Colaborador
 
Fecha de Ingreso: septiembre-2004
Ubicación: Buenos Aires, Argentina
Mensajes: 3.692
Antigüedad: 20 años, 2 meses
Puntos: 47
Respuesta: script Bash para montar varias BDs

Veo que pusiste un par de "echo" para debuguear el problema.
¿Te devuelven los valores correctos?
¿Porqué en vez de usar un índice no usas un
Código:
for archivo in ARCHIVOS
do
    <referenciar cada archivo con $archivo y hacer tus tareas>
done
Saludos
__________________
¡Volviendo a la programación!
  #4 (permalink)  
Antiguo 02/07/2008, 23:27
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 20 años, 3 meses
Puntos: 102
Respuesta: script Bash para montar varias BDs

Gracias por los comentarios.

He probado imprimiendo todos los valores y se imprimen correctamente. Los símbolos era por una diferencia en el juego de caracteres. Ejecuto esto en otra máquina por SSH; yo uso UTF-8, la otra máquina ISO-8859-1. Ahora sé que no son "símbolos", son comillas (¿españolas?) por lo que el mensaje correcto es:
Cita:
mv: no se puede mover «respaldos/junio2008/base12_10-06-08.pgdump» a «tmp/respaldos/junio2008/base12_10-06-08.pgdump»: No existe el fichero o el directorio
... pero no entiendo el por qué. Aclaro que solo esta el directorio tmp/ con permisos 777. Será que no puede crear los directorio respaldos/junio2008? ... probaré

AleSanchez, no lo hago así... porque no sabía se podía hacer así . Gracias, igual lo probaré
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:23.