controla-ancho-de-banda.sh

d
Nombre: controla-ancho-de-banda.sh
Autor: Joaquín E. Naiviat [ joaquinaiviat@yahoo.com.ar ]
Visto en Desde Linux
#    controla-ancho-de-banda.sh
#
#    Copyright 2013 Joaquín E. Naiviat 
#       
#    This program is free software; you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation; either version 3 of the License, or
#    (at your option) any later version.
#       
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#       
#    You should have received a copy of the GNU General Public License
#    along with limita_transmission.sh. If not, see .
#
#
# NOMBRE: controla-ancho-de-banda.sh
#
# DESCRIPCIÓN: Controla las velocidades de carga y descarga del programa
# «Transmission» según el consumo de ancho de banda del programa «Firefox».
#
# REQUIERE: los siguientes programas son necesarios para el correcto
# funcionamiento: Transmission, Firefox, Nethogs, awk.
#
# CONSIDERACIONES:Se requiere su ejecución como root para poder iniciar «Nethogs».
#
#
#
#!/bin/bash
 
#Valores por defecto de carga y descarga de transmission-remote
Lim_U=50
Lim_D=75
 
cd /tmp
 
LimitaSubida50(){
        #Evita usar demasiado el comando transmission-remote
        if [ "$Lim_U" -eq "5" ]; then
                su joaquin -c "transmission-remote -u 50"
                Lim_U=50
        fi
}
LimitaSubida5(){
        if [ "$Lim_U" -ne "5" ]; then
                su joaquin -c "transmission-remote -u 5"
                Lim_U=5
        fi
}
LimitaBajadada75(){
        #Evita usar demasiado el comando transmission-remote
        if [ "$Lim_D" -eq "5" ]; then
                su joaquin -c "transmission-remote -d 75"
                Lim_D=75
        fi
}
LimitaBajadada5(){
        if [ "$Lim_D" -ne "5" ]; then
                su joaquin -c "transmission-remote -d 5"
                Lim_D=5
        fi
}
 
Apagar=0
 
DetenerScript(){
# Termina el Script con estado 130 (SIGINT) correctamente
       
        Apagar=1
       
        #Detiene nethogs si está en ejecución
        VERIF_NETHOGS=` ps ax | grep -v grep| grep "nethogs -t"`
        if [ "$?" -eq "0" ]; then
                killall nethogs
        fi
       
        #Borra /tmp/net.lista
        if [ -f /tmp/net.lista ]; then
                rm /tmp/net.lista
        fi
       
        #Restaura valores predeterminados de carga y descarga de transmission-remote
        LimitaSubida50
        LimitaBajadada75
       
        exit 130
}
 
trap DetenerScript INT TERM
 
 
while true;
do
        if [ "$Apagar" -eq "0" ]; then
       
                #Comprueba si transmission está en ejecución antes de iniciar.
                EJEC_TRANSMSSION=`ps -A | grep transmission`
                if [ "$?" -eq "0" ]; then
                       
                        #Inicia torrents si están pausados
                        VERIF_TRANSMISSION=`transmission-remote -tall -i | grep Stopped`
                        if [ "$?" -eq "0" ]; then
                                su joaquin -c "transmission-remote -tall -s"
                        fi
               
                        #Comprueba si firefox está en ejecución antes de iniciar Nethogs.
                        EJEC_FIREFOX=`ps -A | grep firefox`
                        if [ "$?" -eq "0" ]; then
                                #Guarda la salida de nethogs a un archivo «net.lista»
                                nethogs -t > net.lista &
                                sleep 2
                                killall nethogs 
                                       
                                #Lee net.lista y filtra los KB/s enviados y recibidos
                                #KB/s ENVIADOS: $2 RECIBIDOS $3  
                                KB_ENV=`grep firefox net.lista | awk '{print $2}' | awk -F"." '{print $1}'`
                                KB_REC=`grep firefox net.lista | awk '{print $3}' | awk -F"." '{print $1}'`          
 
                                #Controla ancho de banda de transmission según el uso de firefox                                               
                                #Verifica que "$KB_ENV" o "$KB_REC" no den como resultado nada,
                                #para evitar mensajes de error en -gt
                                if [ "$KB_ENV" != "" ]; then
                                        if [ "$KB_ENV" -gt "0" ]; then
                                                LimitaSubida5
                                        else                       
                                                LimitaSubida50
                                        fi     
                                                               
                                else
                                                LimitaSubida50
                                fi
                                                       
                                if [ "$KB_REC" != "" ]; then
                                        if [ "$KB_REC" -gt "3" ]; then
                                                LimitaBajadada5
                                        else
                                                LimitaBajadada75
                                        fi
                                else
                                                LimitaBajadada75
                                fi
                               
                                sleep 5
                        else
                                #Si Firefox está detenido, restaura valores y espera
                                LimitaSubida50
                                LimitaBajadada75
                                sleep 8
                        fi     
                else
                                #Si Transmission está detenido espera
                                sleep 20
                fi
        else
                #Sale del bucle al recibir la señal Apagar=1
                break
        fi     
                       
        done
 
exit 0

0 comentarios: