Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

267
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!