domingo, 13 de maio de 2012

Desligar computador se o download não terminar

  No código-fonte desta publicação tive que adaptar o código que está em Desligando o micro ao terminar o download.
  Sempre funcionou bem, mas foi preciso pensar numa situação de contorno quando a conexão caia ou quando o roteador wireless dava seus tilts. Neste caso, o download não se completa e a condição test -s "$inteiro" não passa para verdadeiro.
  Foi pensado da seguinte forma: comparo a quantidade de bytes entre 2 segundos consecutivos.
  Se não forem iguais a variável contagem sofre um reset voltando a valer 1 (um). Se forem iguais a variável contagem é incrementada de 1 a cada 1 segundo. Se a contagem chegar a 300 (5 minutos), é executado o comando para desligar.
  Alguns downloads não admitem continuar de onde pararam e talvez seja melhor desligar o computador tão logo que se perceba que o download não será concluído.


#!/bin/bash
# v1.0: 10/21/2006
# v1.1: 04/11/2012
# v1.2: 05/12/2012

parte=""
inteiro=""

contagem=0
until test -s "$inteiro"
  do
   status_antes=`du "$parte" | awk '{printf "%2s\n",$1}'`
   sleep 1
   status_depois=`du "$parte" | awk '{printf "%2s\n",$1}'`

   if [ "$status_antes" -ne "$status_depois" ]
    then
     contagem=1
   else
    let contagem=$contagem+1
     if [ "$contagem" -eq 300 ]
      then
       /sbin/shutdown -h now
     fi
   fi

   echo Download em andamento: $status_depois kB $contagem
   sleep 2
   continue
  done

test -s "$inteiro"
  /sbin/shutdown -h now