
Estou escrevendo um script de backup para meu email e serviço de nuvem.
Para simplificar, postei apenas a parte do backup de e-mail aqui.
Basicamente, eu tenho uma máquina host com algumas caixas virtuais rodando nela.
Essas Caixas Virtuais acessam Host-Machines' /mnt/alias/storage/
onde está a pasta vmail (chamada shishaMail no meu caso)
(Seguir pode não ser uma informação necessária)
Eu gostaria de dizer que tudo dentro /mnt/alias/
é um ln -s
lugar /mnt/rack/*
com nomes bonitos.
Nesta pasta do rack estão as montagens dos drives.
(Informação não necessária FIM)
Aqui está meu roteiro
#!/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
Então, se eu executar este script, recebo o seguinte erro:
O comando 1 foi bem-sucedido
O comando 1 ou/ou 2 foi bem-sucedido
STARTING MAIL BACKUP
tar -czvf '/mnt/alias/backup/2014/06/13/shisha_10_25_.data.tar.gz' /mnt/alias/storage/shishaMail
tar: Removendo `/' inicial dos nomes de membros
tar (filho): '/mnt/alias/backup/2014/06/13/shisha_10_25_.data.tar.gz': Não é possível abrir: Arquivo ou diretório tar (filho) inexistente
: Erro não é recuperável: saindo agora
FALHA!!
Como você pode ver, existe um echo
COMMAND3 que seria:
tar -czvf '/mnt/alias/backup/2014/06/13/shisha_10_21_.data.tar.gz' /mnt/alias/storage/shishaMail
E se eu executar esse comando manualmente, como o mesmo usuário que executo o script (que seria root em ambos os casos), ele funciona.
Não entendo por que o script reclama de um arquivo ou diretório inexistente, pois os diretórios existem, exceto o *.tar.gz
arquivo, pois ele deve ser criado por tar
.
Responder1
Tente remover as aspas simples da linha de criação do COMMAND3:
COMMAND3="tar -cvzf "$PIMPURL"shisha_"$HOUR"_"$MINUTE"_.data.tar.gz "$MAILURL
Quando você executa essa linha manualmente, o shell remove as aspas antes que o tar veja os argumentos.
Você não está inserindo espaços no nome do arquivo, portanto as aspas não são necessárias. Na verdade, você poderia simplificar um pouco mais essa linha:
COMMAND3="tar -cvzf ${PIMPURL}shisha_${HOUR}_${MINUTE}_.data.tar.gz ${MAILURL}"
As chaves servem para delimitar os nomes das variáveis, caso contrário, tentaria expandir 'PIMPURLshisha', provavelmente não o que você deseja. Nunca é demais usá-los, pois também fazem com que as variáveis se destaquem e sejam mais fáceis de escolher.