Archivos de la categoría ‘scripting’

Script para mlnet -controlador automático de las tasas-

Mayo 25, 2008

Hace unos días recibí un e-mail que hacía referencia al script que escribí para controlar las tasas del mldonkey: Controlador automático de los rates del MLDonkey.

Cito textualmente dicho e-mail:
Saludos, este script lo hice basado en uno que publicaste, me gustaria que lo vieras, agradeceria tus comentarios.
lo uso con cron cada 10 minutos, en un servidor ciego con debian.

Estamos en contacto.

Y me puse en contacto con él para ver si podía subirlo al blog, ante su afirmativa aquí está (he modificado algunas variables bajo su permiso para que no de pie a errores):


#!/bin/bash
# Script para Variar las tasas subida/bajan en el Mlnet en una LAN
#Elaborado por Miguel Mtz (aka) Xarmaz
#Basado en trabajos tomados de la RED de:
# Jaime Bosque (aka) KetS e-mail: jaboto (at) gmail.com
# aRDi
# tazok de esdebian.org
#Requerimientos:
#nmap telnet MLdonkey
#
#Se Requiere programar una entrada en Cron para que lo ejecute con regularidad
#Al ejecutarse inicia el demonio mlnet si no esta corriendo,
#determina cuantos equipos estan conectados y asigna la tasa mas
#adecuada de descarga.
#sirve para maquinas basadas en Debian y ubuntu

# definir Variables
#-----------------------------------------------------------------------------------
Usuario=admin
Contrasenna= (pon tu contraseña)
LAN=192.168.1
Servidor=192.168.1.xxx
Puerto=4000
Registro="/var/lib/mldonkey/acelerador.log"

# Establece los criterios y las tasas mas adecuadas
# Todo al Mlnet, solo servidor
TSalta=0
TDalta=0
# 1 o 2 maquinas aparte del servidor
TSMedia=5
TDMedia=15
#mas de 3 maquinas Conectadas.
TSBaja=2
TDBaja=6
#-----------------------------------------------------------------------------------
#Determina si el demonio esta corriendo y de no ser así lo lanza.
EstadoDemonio=`pidof mlnet|wc -l`
Proceso=`pidof mlnet`

if [ "$EstadoDemonio" == "1" ]; then

# Determina cuantas Maquinas estan Conectadas a la LAN
# si hubo cambios procede a modificar estado
NumMaqAct=`nmap -sP $LAN.* | grep $LAN | wc -l`
UltimoReg=`tail -n1 $Registro`
NumMaqAnt=${UltimoReg:22:1}

if [ "$NumMaqAnt" == "$NumMaqAct" ]; then
echo "nada que hacer"
exit 0
else
# Asigna la tasa mas Adecuada en Funcion de las maquinas conectadas
# el valor mas bajo es 2 (router y Servidor)

case $NumMaq in
0|1|2)
TasaS=$TSalta
TasaD=$TDalta
;;
3|4)
TasaS=$TSMedia
TasaD=$TDMedia
;;
5|6|7|8|9|10|11|12)
TasaS=$TSBaja
TasaD=$TDBaja
;;
esac

#Envia la instruccion al Servidor via telnet
{
sleep 1
echo auth $Usuario "$Contrasenna"
sleep 1
echo set max_hard_upload_rate $TasaS
sleep 1
echo set max_hard_download_rate $TasaD
sleep 1
echo q
} | telnet $Servidor $Puerto

#introduce en registro el movimiento.
echo `date +"%d/%m/%y -- %H:%M"` E$EstadoDemonio M$NumMaqAct S$TasaS D$TasaD P$Proceso >> $Registro
fi
else
#Borrar Archivos que pueden impedir el arranque
if [ -f /var/run/mldonkey/mlnet.pid ]; then
rm /var/run/mldonkey/mlnet.pid
rm /var/lib/mldonkey/mlnet.pid
#introducir en registro el movimiento.
echo `date +"%d/%m/%y -- %H:%M"` "mlnet se encontro parado y con archivo pid sin eliminar" >> $Registro
fi
#Inicia el demonio mlnet
/etc/init.d/mldonkey-server start
echo `date +"%d/%m/%y -- %H:%M"` "mlnet lanzado" >> $Registro
fi
exit 0

Espero que os sirva de ayuda, los agradecimientos a Xarmaz, yo sólo me limito a publicar su trabajo ;)

Controlador automático de los rates del MLDonkey

Enero 10, 2008

Bueno, pues como estos días estoy por España y tengo poco que contar (me pego todo el día estudiando, o mal estudiando para ser sinceros). Voy a poner un post acerca de como automatizar las rates del MLDonkey. Es un script que hice hace mucho tiempo y que he encontrado hoy haciendo limpieza en el ordenador, es muy útil si tenéis varios ordenadores en casa, entre ellos un servidor corriendo el MLDonkey y queréis que cuando alguien más se conecte a la red, el servidor deje de utilizar todo el ancho de banda disponible y se establezcan los rates fijados.

El script se llama mldonkeyBand2 y si decidís cambiarle el nombre tendréis que modificar las líneas 84,88,138… del script. Está sin licencia, podría ser GPL aunque prefiero declararlo como dominio público y si alguien hace alguna modificación (mejora), que me lo comuniqué por favor.

Está bastante comentado así que no pongo ninguna explicación, de todos modos si tenéis alguna duda ¡no dudéis en preguntarme! :) (Se ve bastante feo debido a que no consigo dominar el editor html, además he tenido que añadir # para en lugar de usar saltos de linea… grrrrr)


#!/bin/bash
# Script wich test the current number of host in the LAN and
#change MLDonkey bandwidth depending on them.
#
# Writed by: Jaime Bosque (aka) KetS
# e-mail: jaboto (at) gmail.com
#
#Requirements:
# awk, nmap, telnet & MLdonkey :)
#
#Known issues:
# if we are alone in the LAN and we start the current script
# our download rates will be the one set in MLDonkey at the time
# of starting the script.
#
# Number of Host when MLDonkey will run with all the bandwidth
#(2 means current machine and router).
HOSTS=2
LAN=192.168.62
#
# MLDonkey bandwidth limits (0 means all the bandwidth)
MAX_UP=0
MAX_DOWN=0
MIN_UP=2
MIN_DOWN=6
#
# MLDonkey User and Password
USER=admin
PASSWORD=jaime
#
# Server Machine settings of telnet server
IP=localhost
PORT=4000
#
# Variable for output messages (not used anymore
current=""
#
statusMLDonkey(){
state=`ps ax | awk '/mlnet/ {if ($5 == "./mlnet") print $1}' | wc -l`
#state 0 means not running
#state 1 means running
}
#
#lanBeforeState 0 means we weren't alone
#lanBeforeState 1 means we were alone
lanBeforeState=1
#
numberBefore=0
lanChanged(){
hostsnow=$1
if [ $numberBefore -ne $hostsnow ];then
# echo "Something has changed in the LAN"
if [ $hostsnow -gt $HOSTS ];then
# echo "We are not alone in the LAN"
if [ $lanBeforeState -eq 0 ];then
echo "We do nothing"
return 11
else
# echo "We were alone but not now"
# echo "We set the rate to LOW"
lanBeforeState=0
return 22
fi
fi
if [ $hostsnow -le $HOSTS ];then
# echo "We are alone in the LAN"
if [ $lanBeforeState -eq 1 ];then
# echo "We do nothing"
return 11
else
# echo "We weren't alone but now yes!"
# echo "We set the rate to hig"
lanBeforeState=1
return 33
fi
fi
fi
# echo "LAN hasn't changed"
}
start(){
check
}
check(){
if [ -e mldonkeyBand2.pid ]; then
echo "ERROR: mldonkeyBand2 already running" >&2
exit 0
else
echo $$ > mldonkeyBand2.pid
run
fi
}
run(){
while true; do
statusMLDonkey
if [ "$state" == "1" ]; then
numberHosts=`nmap -sP $LAN.* | awk /$LAN/ | wc -l`
# echo "Number of hosts in LAN: $numberHosts"
lanChanged $numberHosts
returned=$?
if [ $returned = 33 ]; then
#Let's change the rates to high!
{
sleep 1
echo "auth $USER $PASSWORD"
sleep 2
echo "set max_hard_upload_rate $MAX_UP"
sleep 2
echo "set max_hard_download_rate $MAX_DOWN"
sleep 2
echo "q"
}| telnet $IP $PORT
current="high bandwidth mode"
fi
if [ $returned = 22 ]; then
#Let's change the rates to low!
{
sleep 1
echo "auth $USER $PASSWORD"
sleep 2
echo "set max_hard_upload_rate $MIN_UP"
sleep 2
echo "set max_hard_download_rate $MIN_DOWN"
sleep 2
echo "q"
}| telnet $IP $PORT
current="low bandwidth mode"
fi
numberBefore=$numberHosts
echo "Sleeping 20 seconds"
sleep 20
else
#MLDonkey is not running we wait a bit...
sleep 30
fi
done
}
status(){
if [ -e mldonkeyBand2.pid ]; then
read pid < mldonkeyBand2.pid
echo "mldonkeyBand2 is running as pid $pid"
return 1
else
echo "mldonkeyBand2 is not running"
return 0
fi
}
stop(){
status
running=$?
if [ $running -ne 0 ]; then
read pid < mldonkeyBand2.pid
kill $pid
rm mldonkeyBand2.pid
else
echo "mldonkeyBand2 is not running"
fi
}
#
case "$1" in
'start')
start;;
'status')
status;;
'stop')
stop;;
*)
echo "Use $0 with { start | status | stop }" >&2;;
esac
#
exit 0

Para usarlo simplemente hacerlo correr con ./mldonkeyBand2.sh start . Aunque yo lo que hago, al ejecutarlo en una máquina remota donde no quiero utilizar logs ni que se muera el proceso al cerrar mi consola es:


$> nohup ./mldonkeyBand2.sh start > /dev/null &

Recordad que para que sea ejecutable tenéis que darle permisos de ejecución:


$> chmod +x mldonkeyBand2