Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

265
Visualizações
Mostrando el progreso de scp durante el proceso de inicialización en la nube

Cuando abro un nuevo servidor, uso un script de inicio en la nube para automatizar el proceso. Sigo el progreso de este proceso con:

 $ tail -f /var/log/cloud-init-output.log

Cuando se trata de obtener un archivo de respaldo usando scp y canalizarlo a través tar -zx , probé lo siguiente en el script de inicio de nube:

 $ scp myuser@123.45.6.789:path/to/file.tar.gz /dev/stdout | tar -zx

Mientras este comando funciona, el práctico progreso indica que las salidas de scp no aparecen en la salida tail -f ... es decir, no veo progreso como:

 file.tar.gz 57% 52MB 25.2MB/s 00:02

También probé la sustitución del proceso bash así:

 $ scp myuser@123.45.6.789:path/to/file.tar.gz >(tar -zx)

Y todavía las indicaciones de progreso no aparecen en la salida tail -f .

¿Cómo conservo las indicaciones de progreso en la salida tail -f ? En particular, para ver el progreso al recuperar los archivos de copia de seguridad más grandes, sería muy útil conservar estas indicaciones.

Tenga en cuenta que cuando ejecuto los dos anteriores en un script de bash directamente (con set -x en la parte superior), el progreso se muestra para la variante de 'sustitución del proceso de bash' pero no para la variante de 'tubería'... pero cuando sigue la nube -registros de inicio, muestra el progreso para ninguna de las variantes.

Parece que cloud-init solo envía stdout y stderr desde todas las etapas de cloud-init a /var/log/cloud-init-output.log (ver aquí ).

Entonces podemos volver a crear el proceso cloud-init (a los efectos de esta pregunta) con la siguiente llamada:

 $ scp myuser@123.45.6.789:path/to/file.tar.gz >(tar -zx) >output.log 2>&1

y luego seguimos este archivo de registro por separado con:

 $ tail -f output.log

Lo extraño es... que nunca aparece ningún estado de progreso en este archivo output.log . Y, sin embargo, definitivamente se envía el estado de progreso... el único cambio en lo siguiente es dirigirlo a /dev/stdout en lugar de a output.log :

 $ scp myuser@123.45.6.789:path/to/file.tar.gz >(tar -zx) >/dev/stdout 2>&1 file.tar.gz 57% 52MB 25.2MB/s 00:02

Entonces, ¿por qué vemos el estado de progreso en /dev/stdout pero no en output.log cuando dirigimos stdout a output.log ?

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Al igual que otras herramientas, scp verifica si su salida va a un TTY (mediante el uso de isatty ), deshabilita la salida del medidor de progreso si no es así (puede encontrar casos similares, por ejemplo, ls --color=auto emite códigos de color solo cuando la salida va a un terminal).

Puede engañarlo para que piense que está enviando a un TTY ejecutándolo bajo un script (como se muestra en esta respuesta ), o cualquier otra herramienta (por ejemplo, expect ) que ejecuta un programa con su salida conectada a un PTY.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda