A veces nos estamos bajando algo bastante grande (la imagen iso de nuestra distribución linux favorita, por ejemplo) y lo interrumpimos por no dejar el equipo en funcionamiento y desatendido por mucho rato. A mi me pasa. Por eso me interesa una forma de apagar el equipo automáticamente al terminar una descarga.
Este script no tiene nada de esotérico; es muy, muy sencillo. Esta es la primera versión. Lo mejoraré con más opciones y condiciones de apagado.
Si estamos descargando algo con amule, tengamos en cuenta que este programa lo almacena primero en su carpeta temporal, y después lo pasa a su carpeta “incoming”. Este script cuenta los ficheros que hay en la carpeta “incoming” y cuando la cuenta sube en el número que le especificamos (el número de descargas que estamos esperando que terminen) apaga el equipo.
Las descargas llevadas a cabo de otra manera deberán tener otra condición. Por ejemplo, pudiera ocurrir que con otro programa, al iniciar la descarga se cree el fichero definitivo y uno temporal y al terminar, el temporal desaparezca. En este caso, la variación en la cuenta de ficheros sería -1 en lugar de 1.
Aquí pongo el script por si le sirve a alguien. Para usar “shutdown” tenéis que tener los permisos adecuados.
——————————————————————————————-
#! /bin/bash
# script para apagar el equipo tras concluir una descarga
CARPETA=”/home/Descargas/in/” # directorio donde se aplica la condición
TIEMPO_ESPERA=10 # tiempo de espera en segundos
descargas=1
cuenta1=$(ls -1 $CARPETA | wc -l)
cuenta1=`expr $cuenta1 + $descargas`
while true
do
cuenta=$(ls -1 $CARPETA | wc -l)
if [ $cuenta1 == $cuenta ]; then
shutdown -h now
else
tim=$(date)
echo $tim
fi
sleep $TIEMPO_ESPERA
done
exit
————————
Hemos usado el programa “wc” que, con su opción “-l” cuenta las líneas que recibe por la entrada estandar o que contiene un fichero.
mohave escribió
Soy nuevo en linux y esto me parece muy útil.
Muchas gracias
P.D. Vaya lío cuando las comillas, al copiar y pegar, se tuercen y uno no cae
mohave escribió
Yo he intentado ejecutarlo así:
sudo ./emule_shutdown.sh &
pero entonces no me continia en background porque espera la contraseña para sudo…¿hay alguna forma de ejecutarlo con sudo y en background?
gracias de nuevo
t.a.c. escribió
Tengo que volver a escribir en el blog. Lo tengo muy abandonado, pero es que no tengo tiempo.
Puedes ejecutarlo como root. Así no tienes problemas.
Otra alternativa, que NO es recomendable si la seguridad es un factor crítico para ti, es que configures sudo para que no te pida la contraseña. Tendrías que modificar un poco el script.
Muchas gracias por pasarte por aquí y aportar.
Yo tengo que volver a escribir algo, pero no he tenido tiempo.
Saludos
t.a.c. escribió
Y si quieres, puedes intentar ejecutarlo como root y usando “nohup”.
“nohup” significa “no hung up”. Con esto el proceso seguirá vivo aunque cierres la consola desde donde lo llamas.
También te puede servir “screen”.
Muchas gracias