BandaAncha.eu

Comunidad de usuarios
de fibra, móvil y ADSL

¿Usar shutdown después de wget en paralelo?

BocaDePez
BocaDePez

Hola, amigos, de nuevo.

Para apagar el sistema automáticamente, por línea de comandos, después de terminar una descarga con wget, es fácil:

# wget [URL_de_descarga] && shutdown -h now

Muy bien. Pero lo anterior no funciona si uso wget en paralelo:

# wget [URL_de_descarga1] & wget [URL_de_descarga2] & wget [URL_de_descarga3] && shutdown -h now

Si lo hago de esta última manera el sistema se apaga inmediatamente. No espera a que terminen los wget's en paralelo.

¿Hay alguna forma de hacerlo?

Muchas gracias.

Saludos.

vukits

el ultimo wget, en vez de && ponle punto y coma

🗨️ 1
BocaDePez
BocaDePez

Oh, qué pena. Casi funciona.

Al principio todo descarga bien, pero si el último wget termina de descargar antes que los precedentes el comando shutdown se ejecuta sin esperar a los demás wget.

Qué lástima. Por poco...

MaestroJedi

Prueba a encerrar entre paréntesis las tres instancias de wget:

$ (wget [URL_de_descarga1] & wget [URL_de_descarga2] & wget [URL_de_descarga3]) && shutdown -h now

Ya nos cuentas si te ha funcionado.

Un saludo

Editado (1): Dejo las tres instancias de wget tal cual las pusiste tú. La modificación que hice yo no daba el resultado que esperaba.

🗨️ 3
BocaDePez
BocaDePez

Gracias por la respuesta, pero da el mismo resultado que poniendo punto y coma.

Un saludo.

🗨️ 2
MaestroJedi

Es extraño. Bueno, te comento la idea que tenía en mente cuando escribí mi anterior respuesta, por si la hallas tú en un momento de lucidez: se trata de que las tres instancias de wget sean tratadas como una unidad, de modo que únicamente cuando terminen las tres (y sólo las tres), se ejecute el comando shutdown.

Ahora mismo, la única forma de conseguir eso que se me ocurre es con los paréntesis, pero igual, y dependiendo de la distribución de GNU/Linux y la versión de BASH que emplees (entre otras factores), puede ser necesario añadir, por ejemplo, espacios a los paréntesis y/o incluso añadirles una barra ("\") para "escaparlos", por si el intérprete de comandos no los trata adecuadamente.

Ya nos contarás. Lo mismo haré yo si encuentro la forma.

Un saludo

🗨️ 1
BocaDePez
BocaDePez

Nada. No lo consigo.

He probado a delimitar los wget con barras, contrabarras, comillas, paréntesis, corchetes y llaves, con espacios y sin espacios. He probado hasta a crear un mini-script con los wget, pero nada de lo probado da el resultado deseado.

Gracias de todas formas, amigo, por su interés.

Un saludo.

vukits

en multi-hilo se usan semaforos y cosas raras... lo más simple es usar 'wait' en un script mete (usa variables $1, $2, si hace falta)

wget [URL_de_descarga1] &
wget [URL_de_descarga2] &
wget [URL_de_descarga3] &
wait
shutdown -h now

quizás también funcione

wget [URL_de_descarga1] & wget [URL_de_descarga2] & wget [URL_de_descarga3]; wait; shutdown -h now
🗨️ 17
BocaDePez
BocaDePez
1

¡En toda la diana...!

Ahora sí. Ahora, hasta que no terminan todas las wget, no se ejecuta shutdown. Me sonaba a mí ese comando ("wait") de haberlo leído en EsDebian, pero no me acordaba...

Muchas gracias a MaestroJedi y a vukits por la ayuda prestada.

"Es el poder de la línea de comandos..."

Un cordial saludo.

MaestroJedi

Muy bueno. Me lo apunto, pues tampoco recordaba yo ese comando, y estoy seguro de que me va a ser muy útil en mis scripts.

Un saludo a todos.

Edito (1): Una duda: en la segunda línea de comando que has puesto, ¿ejecutas las tres instancias de wget en segundo plano, o sólo las dos primeras? Lo digo porque no veo que hayas utilizado el indicador ("&") en la tercera.

🗨️ 15
BocaDePez
BocaDePez

Pues en mi caso se ejecutan los 3 en paralelo indistintamente de que ponga ";" ó "&":

# wget [URL_de_descarga1] & wget [URL_de_descarga2] & wget [URL_de_descarga3]; wait; shutdown -h now

ó

# wget [URL_de_descarga1] & wget [URL_de_descarga2] & wget [URL_de_descarga3] & wait; shutdown -h now

Saludos.

vukits

si quieres que todos se ejecuten en 2º plano, pues se usa & .. yo, en el último he puesto punto y coma , para simular un salto de linea ;)

saludos

🗨️ 13
BocaDePez
BocaDePez

Perdón por reincidir, pero tengo una nueva duda.

He hecho este mini-script para realizar descargas paralelas con wget:

#!/bin/bash
for url in $@; do
  wget $url &
done
wait
exit

Si le introduzco, por ejemplo...

$ mini-script.sh [URL_1] [URL_2] [URL_3]

...pues me realiza 3 descargas paralelas.

Muy bien. Pues yo quisiera saber si es posible, a la hora de introducir 4 URL's, que las dos primeras vaya al primer bucle de wget (y se descarguen secuencialmente) y las otras dos a sus respectivos bucles.

No se si me explicado bien. Quiero que siga habiendo 3 descargas paralelas, aunque se hayan introducido 4 URL's. El primer bucle deberá descargar la primera URL y, al terminar ésta, descargará la segunda; todo ello sin perderse el funcionamiento en paralelo con las otras dos URL's restantes.

¿Cómo puedo indicárselo al script, si se puede?

Muchas gracias.

Saludos.

🗨️ 12
vukits
asqwerty
🗨️ 10
BocaDePez
BocaDePez
🗨️ 9
BocaDePez
BocaDePez
🗨️ 2
BocaDePez
BocaDePez
🗨️ 1
BocaDePez
BocaDePez
BocaDePez
BocaDePez
🗨️ 5
asqwerty
🗨️ 4
BocaDePez
BocaDePez
🗨️ 3
BocaDePez
BocaDePez
1
🗨️ 2
Pridebowl
🗨️ 1