
Estoy escribiendo un script de respaldo para mi correo electrónico y servicio en la nube.
Para simplificar, solo publiqué aquí la parte de la copia de seguridad del correo.
Básicamente, tengo una máquina host con algunas cajas virtuales ejecutándose en ella.
Estas Virtual Boxes acceden a las Host-Machines /mnt/alias/storage/
donde está la carpeta vmail (llamada shishaMail en mi caso)
(Es posible que la siguiente información no sea necesaria)
Me gustaría decir que todo lo que hay dentro /mnt/alias/
es una ln -s
casa /mnt/rack/*
con nombres bonitos.
En esta carpeta de rack se encuentran los soportes de las unidades.
(Información no necesaria FIN)
Aquí está mi guión
#!/bin/bash
# backup script
BASEURL="/mnt/alias/backup"
MAILURL="/mnt/alias/storage/shishaMail"
DAY=`eval date +"%d"`
MONTH=`eval date +"%m"`
YEAR=`eval date +"%Y"`
HOUR=`eval date +"%H"`
MINUTE=`eval date +"%M"`
PIMPURL=$BASEURL/$YEAR/$MONTH/$DAY/
COMMAND1="cd $PIMPURL"
$COMMAND1 2>/dev/null
if [ $? -eq 0 ]
then
echo "Command 1 was successful"
else
echo "There ain't folders!!"
echo "I'll mkdir some!"
COMMAND2="mkdir -p $PIMPURL"
$COMMAND2 2>/dev/null
fi
if [ $? -eq 0 ]
then
echo 'Command 1 or/and 2 was successful'
echo "STARTING MAIL BACKUP"
COMMAND3="tar -cvzf '"$PIMPURL"shisha_"$HOUR"_"$MINUTE"_.data.tar.gz' "$MAILURL
echo $COMMAND3
$COMMAND3 2>/dev/null
if [ $? -eq 0 ]
then
echo 'MAIL BACKUP SUCCESSFULL'
else
echo "FAILURE!!"
fi
else
echo 'Nope! Must be some kind of strage Err0r!!'
fi
Entonces, si ejecuto este script, aparece el siguiente error:
El comando 1 fue exitoso
El comando 1 y/o 2 fue exitoso
INICIANDO LA COPIA DE SEGURIDAD DEL CORREO
tar -czvf '/mnt/alias/backup/2014/06/13/shisha_10_25_.data.tar.gz' /mnt/alias/storage/shishaMail
tar: Eliminando `/' inicial de los nombres de miembros
tar (secundario): '/mnt/alias/backup/2014/06/13/shisha_10_25_.data.tar.gz': No se puede abrir: no existe tal archivo o directorio
tar (secundario): Error no es recuperable: salir ahora ¡
¡FALLO!!
Como veis hay un echo
de COMMAND3 que sería:
tar -czvf '/mnt/alias/backup/2014/06/13/shisha_10_21_.data.tar.gz' /mnt/alias/storage/shishaMail
Y si ejecuto este comando a mano, como el mismo usuario con el que ejecuto el script (que sería root en ambos casos), funciona.
No entiendo por qué el script se queja de que no existe un archivo o directorio, ya que los directorios existen excepto el *.tar.gz
archivo, ya que este debe ser creado por tar
.
Respuesta1
Intente eliminar las comillas simples de la línea de creación de COMMAND3:
COMMAND3="tar -cvzf "$PIMPURL"shisha_"$HOUR"_"$MINUTE"_.data.tar.gz "$MAILURL
Cuando ejecuta esa línea a mano, el shell elimina las comillas antes de que tar vea los argumentos.
No estás insertando espacios en el nombre del archivo, por lo tanto, las comillas no son necesarias. En realidad, podrías simplificar esa línea un poco más:
COMMAND3="tar -cvzf ${PIMPURL}shisha_${HOUR}_${MINUTE}_.data.tar.gz ${MAILURL}"
Las llaves sirven para delimitar los nombres de las variables; de lo contrario, intentaría expandir 'PIMPURLshisha', probablemente no sea lo que desea. Nunca está de más usarlos, ya que también hacen que las variables se destaquen y sean más fáciles de seleccionar.