[FUG-BR] Redirecionamento de scp em shell script não funciona.

Paulo Henrique - BSDs Brasil paulo.rddck em bsd.com.br
Sábado Abril 12 11:07:48 BRT 2014


Opa Saudações,

Em 12/04/2014 09:46, Nilton OS escreveu:
> Porque não use rsync, acho que é mais simples, desse modo não precisar
> passar senha de user.
>
> Coloca rsync server na máquina destino, configura os acesso e pronto.
Valeu a dica Nilton, no passado já usava, só que acabava o backup não 
concluindo antes do inicio do expediente e o servidor ficava um pouco 
carregado.
A diretoria pediu backup completo diário e não quer incremental.
>
>
>
> ..............................................................................................
>   *Nilton OS* | *Working Linux 15 years ago* |
> linuxpro.com.br<http://www.linuxpro.com.br>
>
> *"**Só tem o direito de criticar aquele que pretende ajudar. AL"*
>
>
> Em 12 de abril de 2014 09:03, Renato Botelho <rbgarga em gmail.com> escreveu:
>
>> On Sex, 2014-04-11 at 17:59 -0300, Paulo Henrique - BSDs Brasil wrote:
>>> Saudações,
>>>
>>> Estou com um problema quanto a redirecionamento do stdout e stderror do
>>> scp para um arquivo durante a copia.
>>> Pesquisando achei a mesma duvida respondida pelo Eduardo Schoedler
>>> informou porem sem exito[1].
>>>
>>> E todos os redirecionamentos que tentei não deram certo.
>> A primeira pergunta é, qual o shell? (/bin/sh, /bin/csh)? Como você não
>> postou o shebang aqui não dá pra saber e isso muda muita coisa. Vou
>> responder considerando que seja /bin/sh, se não for me dá um toque.

Renato, estou usando o /bin/sh.

>>
>>> #Variaveis Gerais não alteraveis.
>>>
>>> DATA=`date "+%d-%m-%Y"`
>>> SSHSERVER=hostname.intranet
>>> SSHUSER=root
>>> DIRBASE="$SSHUSER@$SSHSERVER:/mnt/BKPS/DOMINIO01/$DATA/"
>> Uma boa prática aqui é sempre colocar as variáveis entre {} para evitar
>> que o shell se confunda e pense que o @ é parte do nome da variável, por
>> exemplo:
>>
>> DIRBASE="${SSHUSER}@${SSHSERVER}:..."
>>
>> Outra pergunta, o diretório ${DATA} existe no servidor remoto? Se ele
>> não existir vai dar problema se eu me lembro bem. O que você pode fazer
>> pra garantir é rodar algo assim antes:
>>
>> ssh -p 6666 ${SSHUSER}@${SSHSERVER} \
>>      "mkdir -p /mnt/BKPS/DOMINIO01/${DATA}"

Achei que esse lance de {} era coisa apenas do csh, pois nele sempre 
utilizei assim como descreveu, sem as chaves da erro.
No scp não dá erro quanto ao diretorio desde que esse seja o ultimo, se 
tiver uma hierarquia de dois ou mais ai acusa erro de directory not found.
No caso abaixo do diretório DOMINIO01 o próprio scp se encarrega de 
criar o diretorio ${DATA},
>>
>>> #Iniciando o Backup
>>> echo "Entrando no diretorio do servidor de arquivos"
>>> cd /storage/Compartilhamentos/
>>> echo "Diretorio Corrente"
>>> pwd
>>>
>>>
>>> DIR=Administracao
>>> echo "Efetuando o backup do Compartilhamento $DIR Para hostname" >>
>>> /var/log/backups-$DIR-$DATA.log ( Essa linha é escrita )
>>> scp -rv -P 6666 $DIR $DIRBASE >> /var/log/backups-$DIR-$DATA.log ( Essa
>>> linha NÃO é escrita )
>>> echo "O Backup do Diretorio $DIR Foi concluido com exito" >>
>>> /var/log/backups-$DIR-$DATA.log ( Essa linha é escrita )
>> O > e o >> vai escrever ou adicionar o conteúdo do stdout no arquivo,
>> enquanto o 2> e 2>> faz o mesmo para stderr, então vale redirecionar o
>> stderr para o stdout assim você garante que tudo seja gravado.
>>
>> scp -rv -P 6666 ${DIR} ${DIRBASE} >> /var/log/.... 2>&1
>>
>> Eu fiz um pequeno teste aqui só pra comprovar:
>>
>> scp -v file server: >o 2>e
>>
>> E confirmei que o scp -v escreve em stderr, no final das contas o
>> arquivo 'o' estava vazio e o 'e' tinha os dados, então a linha com 2>&1
>> deve resolver. :)
>>
>> []s
>> --
>> Renato Botelho

Acho que estava comendo bronha no redirecionamento do stderr, agora está 
funcionando corretamente.
Afranio, não testei a sua dica, mais quando estiver com tempo irei 
fazer, valeu.

Valeu a  ajuda de todos e pelas dicas Renato, Nilton e Afrânio.


>>
>> -------------------------
>> Histórico: http://www.fug.com.br/historico/html/freebsd/
>> Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd
>>
> -------------------------
> Histórico: http://www.fug.com.br/historico/html/freebsd/
> Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd

-- 
Paulo Henrique.
Grupo de Usuários do FreeBSD no Brasil.
Fone: (21) 96713-5042



Mais detalhes sobre a lista de discussão freebsd