Output progess do comando scp / sftp para o padrão out e um arquivo no servidor linux

5

Eu estou escrevendo um script de lançamento, que usa scp / sftp para obter o arquivo de um servidor remoto, nós queremos registrar a saída deste script para um arquivo release.log também. Eu estou usando "tee" para conseguir isso, o que funciona perfeitamente bem para tudo, quero dizer padrão fora e erro, mas quando se trata de progresso do download do arquivo (que leva tempo para copiar), ele não aparece no console ou no arquivo também.

Saída do scp sem tee

[email protected]:/apps/flowrisk/valservice/release/London/uat2/vs-server-2.1.16-21190-linux-amd64-frod-uat2-London-dist.zip /apps/flowrisk/uatldn/valservice
vs-server-2.1.16-21190-linux-amd64-frod-uat2-London-dist.zip                                                               100%   78MB  39.1MB/s   00:02

Saída do scp WITH tee

[email protected]:/apps/flowrisk/valservice/release/London/uat2/vs-server-2.1.16-21190-linux-amd64-frod-uat2-London-dist.zip /apps/flowrisk/uatldn/valservice

Alguém por favor pode me dizer como fazer com que ele gere o progresso do comando scp / sftp no console com o tee, para que o usuário saiba o que está acontecendo?

    
por Gilles 13.05.2011 / 19:29

2 respostas

4

Ter o medidor de progresso no arquivo de log não parece muito útil. Que tal executar scp com sua saída padrão conectada ao terminal? Isso tem a desvantagem de que, se o script for interrompido no meio da transferência, não haverá nada no log para indicar o progresso (mas isso é uma desvantagem muito pequena, como o tamanho da transferência parcial).

scp remotehost:/path/to/file /local/file >/dev/tty

Se você quiser salvar a saída do progresso de scp , use script .

script -q /dev/stdout -c 'scp remotehost:/path/to/file /local/file' | tee scp.log

Como alternativa, você pode inserir pv no canal para obter uma indicação de progresso. Isso não é tão bom quanto scp porque pv só sabe o número de bytes transferidos, não o total.

ssh remotehost 'cat /path/to/file' | pv -bpt >/local/file
    
por 02.06.2011 / 20:44
3

Parece que scp desativa o medidor de progresso se a stdout não for tty . o o artigo I vinculado contém uma pseudo-pirataria terminal que pode funcionar para você; ou você poderia entrar na fonte scp e desabilitar a isatty() check.

    
por 13.05.2011 / 20:01