Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

266
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda