O que estou tentando escrever é um script de shell que fará backup de um site e de todos os bancos de dados MySQL que o suportam. Encontrei exemplos em toda a rede, mas quando executo o script no bash em uma sessão SSH presa, ele falha. Se eu digitar os comandos diretamente na sessão SSH, eles funcionarão bem.
#!/bin/sh
DB1="first_db"
THEDATE=$(date +"%Y-%m-%d")
THEUSER=user
THEDBPW=password
mysqldump -u $THEDBUSER -p$THEDBPW $DB1 > dbbackup_$DB1_$THEDATE.sql
tar -czf sitebackup_website_$THEDATE.tar /home/website/public_html
gzip sitebackup_website_$THEDATE.tar
Este script reside no servidor web, portanto, para fins de teste, eu faço SSH no servidor, cd
no diretório e executo o bash backup.sh
. mysqldump
não está se conectando, parecendo não conseguir passar a senha (ele retorna um erro relatando 'usando senha: NÃO'). Em seguida, o comando tar falha, relatando que não pode ser iniciado /home/website/public_html
com um 'arquivo ou diretório inexistente'. tar
em seguida, relata que está saindo com status de erro devido a erros anteriores.
O que estou perdendo aqui?
Responder1
Verifique o script para terminações de linha do Windows fazendo login no servidor e executando
cat -v /path/to/script
Se a linha terminar com ^M
, esse é o problema.
Você pode corrigir um arquivo com finais de linha quebrados executando
dos2unix /path/to/script
Se dos2unix não existir no servidor, você poderá usar sed, assim:
sed -i 's/\r$//' /path/to/script
Responder2
Você atribuiu o nome de usuário à variável THEUSER
, mas seu mysqldump
comando está usando a variável THEDBUSER
.
Responder3
tardir=$PWD ; cd /home/website/public_html &&
tar -czf "$tardir"/sitebackup_complete-office_"$THEDATE.tar"
ou apenas:
tar -C/home/website/public_html -czf \
sitebackup_complete-office_"$THEDATE.tar"
Em geral, muitos tars
não conseguirão trabalhar com caminhos absolutos, a menos queexplicitamente instruídopara fazer isso.
Por padrão, o GNU tar descarta
/
a entrada ou saída e reclama dos nomes dos arquivos que contêm um..
componente. Esta opção desativa esse comportamento.
É perfeitamente possível que ssh's
os comandos resolvam caminhos antecipadamente, dependendo da entrega e cotação do comando. O mesmo é relevante para a expansão das variáveis nos seus nomes de caminho.
Responder4
Se entendi corretamente a descrição do problema, a principal diferença parece ser apresoSessão SSH - os processos em execução dentro da sessão encarcerada não podem ser vistos fora de seu diretório de prisão (geralmente sua casa). É por isso que você não tem problemas em sessões sem prisão. Você também pode dar uma olhada nowikipedia Entrada na prisãopara mais detalhes.