A melhor forma de captura e saída log scp?
Pergunta
Eu estou tentando saída de captura a partir de um script de instalação (que usos scp) e registrá-lo. No entanto, eu não estou recebendo tudo o que scp está a imprimir para fora, ou seja, a barra de progresso.
saída de tela:
Copiar / User2 / cdb / constrói / tmp / UAT / myfiles / * para servidor / usuários / myfiles como cdb
cdb @ senha do servidor: myFile 100% | ***************************** | 2503 00:00
saída de log:
Copiar / User2 / cdb / constrói / tmp / UAT / myfiles / * para servidor / usuários / myfiles como cdb
Eu realmente gostaria de saber que meu arquivo chegou lá. Aqui está o que estou tentando agora sem sucesso:
myscript.sh 2> & 1 | tee mylogfile.log
Alguém tem uma boa maneira de saída scp captura e registrá-lo?
Graças.
Solução
Parece que o seu faltando apenas se o scp foi bem sucedida ou não do registro.
Eu estou supondo que a barra de rolagem não imprime para stdout e usos ncurses ou algum outro tipo de TUI?
Você pode apenas olhar para o valor de retorno de scp para ver se ele foi bem sucedido. Como
scp myfile user@host.com:. && echo success!
man scp
diz
scp exits with 0 on success or >0 if an error occurred.
Outras dicas
scp imprime sua barra de progresso para os que utilizam códigos de controle do terminal. Ele irá detectar se você redirecionar a saída e, portanto, omitir a barra de progresso.
Você pode obter em torno de que enganando scp em pensar que é executado em um terminal usando o comando "script" que está instalado na maioria dos distros por padrão:
script -q -c "scp server:/file /tmp/" > /tmp/test.txt
O conteúdo de test.txt será:
file 0% 0 0.0KB/s --:-- ETA
file 18% 11MB 11.2MB/s 00:04 ETA
file 36% 22MB 11.2MB/s 00:03 ETA
file 54% 34MB 11.2MB/s 00:02 ETA
file 73% 45MB 11.2MB/s 00:01 ETA
file 91% 56MB 11.2MB/s 00:00 ETA
file 100% 61MB 10.2MB/s 00:06
... que é provavelmente o que você quer.
Eu tropeçou este problema enquanto redirecionando a saída de um script interativo em um arquivo de log. Não ter os resultados no log não foi um problema, como você pode sempre avaliar códigos de saída. Mas eu realmente queria que o usuário interativo para ver a barra de progresso. Esta resposta resolve ambos os problemas.
Talvez você pode usar ' roteiro rel="nofollow ' para registrar a sessão de terminal.
scp myfile user@host.com:. && echo success!
é muito útil, mas para escrever a mensagem para um arquivo de log eu mudei-lo como este
scp myfile user@host.com:. && echo myfile successfully copied! >> logfile 2>&1
e isso vai escrever "myfile copiado com sucesso!" mensagem para o arquivo de log.
Tente:
scp server:/file /tmp/ > /dev/tty
Não posso comentar ainda :( então eu vou adicionar uma atualização aqui ...
@ Martin teve a melhor solução para mim, embora se o seu comando scp está a meio caminho através de seu roteiro, então é saída pode aparecer depois de comandos que realmente correu depois.
Eu acho que é porque script deve executar o comando em um subshell, mas eu ainda estou para teste.
EDIT: é, de fato, gerar um shell por isso, se você precisa de coisas para executar (e de fato falhar) de forma sequencial (como em um script de construção), então você teria que adicionar alguma lógica em torno do uso do comando script.
i.
roteiro q -c "seu comando" && sleep 1
ou algo semelhante para que seus pais shell aguarda o shell criança ao fim antes de prosseguir.
Sim, eu recentemente estava tentando obter uma saída dentro de um script php de proc_open () eu perdi uma calma um tempo tentando obter uma saída :-) mas é um pouco tarde aqui e eu depois de ler este post aqui me fez perceber que eu realmente não precisa esta saída junky para o meu script
apenas o código de saída irá fazer o trabalho: -)
$ exit_code = proc_close ($ process);
$ grep -r "Error" xyz.out > abc.txt
Aqui no comando acima Eu sou armazenar saída em Abc.txt arquivo.
Este comando grep
é para pesquisar containg texto Erro no arquivo xyz.out e armazenar a saída em Abc.txt sem exibir no console .