Script Bash: Controlar ample de banda de Transmission automàticament

Hola a tots. Aquest és el meu segon post. No acostumo a escriure posts a menys que tingui alguna cosa bona per compartir i aquesta vegada tinc alguna cosa que segurament a molts els va interessar.

Fa uns mesos pensava fer un script per limitar l'ample de banda d'aplicacions, però tenia alguns problemes i errors que em dificultaven la tasca, llavors plantegi els meus dubtes al fòrum de <º DesdeLinux per si a algú se li acudia una idea.

Així ho vaig deixar per un temps i un bon dia em vaig proposar reprendre l'script. Vaig fer moltes proves, vaig llegir bastant sobre bash, i vaig tenir mals de cap en les meves estones lliures 'Però ho aconsegueixi !!

Tinc una satisfacció enorme i llavors he decidit compartir amb vostès el meu petit script perquè el facin servir i millorin. Penso llicenciar sota GPLv3, però és el meu primer projecte així que no estic molt segur com es fa això (necessito consells de qui ho hagi fet abans).

Bé, ara explicaré quina era la meva necessitat i què vaig fer per solucionar el problema.

Situació
Tinc un pla d'Internet de 512Kbs, per tant faig ús de transmissió com a client BitTorrent per descarregar arxius grans (com LibreOffice i algunes distros de GNU / Linux). Amb aquesta velocitat les descàrregues demoren bastant i el problema és a l'usar el navegador web Firefox: Triga bestante a carregar.

Quan em connecto a Internet, actiu els límits temporals de càrrega i descàrrega de Transmission i espero que carregui Firefox, després arrenco de nou els torrents. Com veuran, fer això un parell de vegades és tediós. Ni parlar que de vegades directament puc pausar tots els torrents i després m'oblido de activar-de nou, el que porta a temps valuós perdut per a la càrrega / descàrrega dels torrents.

Solució
Per aquest problema vaig decidir crear un script en Bash que fa bàsicament el següent:

1. Comprova que Transmission estigui executant i no hi hagi cap torrent pausat. Si és així, activa novament els torrents.

2. Verifica que el Firefox estigui en execució. Després obté els KB / s enviats i rebuts per ell i els guarda en un arxiu.

3. Si els KB / s de càrrega o descàrrega de el navegador superen un marge de referència, es canvien els valors de pujada / baixada de Transmission.

Això permet que a l'voler accedir a una pàgina web, quan el navegador envia la petició, es limiti la càrrega d'arxius de Transmission i quan es reben les dades de la pàgina, es limita la descàrrega. Això funciona molt bé quan es accedeixen a diverses pàgines a la vegada i realment els resultats són els mateixos que amb Transmission desactivat.

El gran avantatge és que és totalment automàtic i no requereix de la meva intervenció.

l'script
Si bé podria usar-se per controlar el consum d'ample de banda de qualsevol aplicació, de moment només està escrit per solucionar un problema molt particular. Però no és molt difícil fer modificacions.

Requisits
Perquè funcioni correctament és necessari tenir instal·lada l'aplicació «nethogs».

En aquest cas com l'script funciona amb Firefox i Transmission, cal tenir aquestes aplicacions instal·lades, a més de «transmission-remote» que és la que canvia els valors de càrrega i descàrrega dels torrents. També ús en l'script «awk». Ho esmento perquè no sé si totes les distros el porten instal·lat.

programari utilitzat
Una llista de les aplicacions que fa ús l'script i el sistema on funciona.

• Debian GNU / Linux 6.0.8
• Linux 2.6.32-5-686
• Firefox 24.0
• Transmission 2.03 (11030)
• Nethogs 0.7.0

Execució
Ha de executar com a root causa que nethogs només pot executar-se amb aquest usuari, però transmission-remote s'executa amb l'usuari normal per mitjà de la comanda seva.

L'script fa servir la comanda intern de Bash trampa amb el qual permet restaurar els valors per defecte de càrrega / descàrrega de Transmission, quan és detingut per mitjà dels senyals SIGINT (CTRL + c) o SIGTERM.

Encara no bé com fer per executar-lo a l'inici i que s'aturi quan apago o reinici l'equip. Pensava posar un enllaç a l'arxiu /etc/rc.local però no sé si funcionaria, i no entenc molt bé com funciona / etc /init.d (Vaig veure alguns scripts que allí es troben, fins i tot esquelet, Però no els entenc). Si algú pot ajudar-me, li estaré molt agraït.

Bé amics, això és tot. Espero que la meva petita aportació els resulti útil i que puguin millorar-lo si així ho desitgen. Amb gust llegiré les seves opinions i recomanacions com així també suggeriments en cas que hi hagi problemes de seguretat amb l'arxiu (no sóc programador, només faig algunes coses de tant en tant).

Es que amb alguns arranjaments pot arribar a ser una gran aplicació en el futur, si jo sóc algun programa que faci el mateix. Per exemple se m'ocorre que podria tenir una interfície gràfica en zenitat i poder triar les aplicacions a les que volem prioritzar en l'ús d'ample de banda (navegador web, gestor d'actualitzacions, transferència d'arxius, etc.) i els diferents valors de referència. Sí, és una cosa ambiciós, però força útil.

Podeu descarregar el script en el enganxar. 'Moltes gràcies per llegir !!


Deixa el teu comentari

La seva adreça de correu electrònic no es publicarà. Els camps obligatoris estan marcats amb *

*

*

  1. Responsable de les dades: Miguel Ángel Gatón
  2. Finalitat de les dades: Controlar l'SPAM, gestió de comentaris.
  3. Legitimació: El teu consentiment
  4. Comunicació de les dades: No es comunicaran les dades a tercers excepte per obligació legal.
  5. Emmagatzematge de les dades: Base de dades allotjada en Occentus Networks (UE)
  6. Drets: En qualsevol moment pots limitar, recuperar i esborrar la teva informació.

  1.   ILAV va dir

    Oh! interessant 😀

    1.    eliotime3000 va dir

      A la cantonada inferior esquerra tens l'opció de limitar l'ample de banda que consumeix Transmission tant en la pujada com en la baixada. Amb Transmission no he tingut cap problema amb això.

      1.    galeta va dir

        Però això és automàtic, a més també hi ha Transmission sense interfície gràfica així que pot no tingui aquesta funció tan a la mà.

      2.    Joaquin va dir

        Hola, com estàs.
        Sí això ja ho sé. Però és justament el que no vull fer.
        Tinc un pla d'Internet molt pobre (512KB i és el millor a la meva zona).

        Amb el meu script, em va despreocupar de fer tot a mà. Imagina't que obriu una pàgina en el navegador i Transmission està ocupant tot l'ample de banda en aquest moment, llavors la pàgina triga una estona a carregar (com a molt 1 ", però és desesperant). Ja em vaig cansar de «activar els límits temporals» cada dos minuts. Això és automàtic i gairebé instantani (verifica els KB enviats i rebuts per Firefox cada 5 segons).

        Realment en el meu cas amb aquesta velocitat d'Internet, és excel·lent. A més no conec una altra aplicació que faci això, sinó no ho hagués fet. Les que he vist només limiten l'ample de banda, però no automàticament.

        Espero haver estat clar. Gràcies per llegir!

        1.    Joaquin va dir

          Perdó, em vaig expressar malament. No són 512KB, més aviat són Kbits. (O sigui, 1/2 «Mega»). El màxim que puc descarregar és a 75KB / es i de pujada 50KB / s. Això quan va bé Internet, sinó el normal és 48 i 23.

    2.    Joaquin va dir

      Gràcies!

  2.   galeta va dir

    Interessant, jo faig servir qBittorrent i ús el switch per als límits.

    Es veu bonic el post amb aquests colors 😉

    1.    Joaquin va dir

      Gràcies per la dels colors. No sóc molt bo en això, sembla molt llarg i monòton amb tant text.

  3.   jorge va dir

    En el personal ús transmission-daemon i firefox amb pestanya d'aplicació viva, així no camino amb programes externs o oblidant-me de continuar els torrents o la tortuga activada (i puc controlar-ho des de la meva telèfon). Per iniciar un servei s'agrega un usuari (ex: adduser -disabled-password nethogs), es crea un arxiu de text per al dimoni en /etc/init.d amb un nom (ex: nethogs-daemon) i després en debian es escriu «update-rc.d nethogs-daemon defaults» perquè arrenqui sol.

    L'arxiu de text és un script bash també, que pots fusionar el teu script dins.
    Fixa't si et pot servir això, serveix per autoarrancar transmission-daemon, pot servir per autoarrancar nethogs https://trac.transmissionbt.com/wiki/Scripts/initd

    1.    Joaquin va dir

      Hola!
      A veure si vaig entendre: això és per arrencar Transmission a l'inici i detenir a l'apagar o reiniciar. Amb això no tinc problemes ja que sempre arrenca sol i comença a descarregar (El vaig agregar a les aplicacions a l'inici en Xfce).

      El meu problema és que si a l'col·locar el script en rc.local o en init.d jo no sé com l'equip deté l'script. O sigui, òbviament a l'apagar / reiniciar la PC, s'acaben tots els processos (i amb ells també Transmission i Nethogs) però no sé que passaria amb la meva script.

      I per què em preocupa això? L'script crea un arxiu en / tmp i controla la velocitat de Transmission. Si jo ho executo en un terminal i de sobte el detinc (per exemple amb CTRL + c), l'script abans de tancar-se, restaura les velocitats per defecte (en cas que sigui necessari) i després s'atura Nethogs i esborra l'arxiu de / tmp. Vaig tractar de fer-ho el més «professional» possible perquè no deixi cap arxiu solt o procés en segon pla.

      Sobre el que vas dir, no vaig entendre què és «pestanya d'aplicació viva».

      1.    jorge va dir

        Una pestanya d'aplicació és una pestanya permanent, sempre és oberta i minimitzada dins firefox http://i.imgur.com/a5i0aP3.png (Menu contextual sobre pestanya, clic a «enganxar pestanya»). Els daemon a l'enviar senyal TERM esperen una estona, fins després d'haver tancat sessió, i guarden les seves dades. Fixa't que a l'enllaç que vaig donar abans a l'sortir l'script crida a start-stop-daemon i li diu a transmission que aturi, ahi podries enganxar «killall nethogs» i el que conté DetenerScript. L'script en init en aquest cas hauries de cridar-ho com a root en comptes d'un usuari específic, ja que necessita privilegis.

        1.    Joaquin va dir

          Bé gràcies per la dada. Quant tingui temps ho provo!

  4.   facundo va dir

    genial, m'he trobat amb aquest inconvenient ja que encara que es tingui una connexió ràpida un es veu obligat a limitar transmission mentre vol navegar i així «malgasta» temps.
    Ho vaig a provar quan pugui. Salutacions i gràcies !!

    1.    Joaquin va dir

      Gràcies a vós! Espero que et serveixi!

      1.    facundo va dir

        Hola de nou Joaquin. Veig que aquestes ocupant-de respondre a tots els comentaris asique em vaig a aprofitar d'això i et faré un parell de consultes de principiant.
        Primer com es si tinc l'script «awk» instal·lat? Ús Debian 7.2.
        Segon, no es bé què fer amb el codi de l'paste. Tinc que agafar un editor de text i guardar-lo en un arxiu que es digui «controla-ancho-de-banda.sh» i després executar-lo com «./controla-ancho-de-banda.sh». Aquesta és la part en la que estic més perdut.
        Tercer: Quan dieu executar com a root, cal canviar d'usuari a root o amb un sudo arriba?

        Si tenes alguna lectura per recomanar-me del tema, t'ho agraeixo.
        Salutacions!

  5.   Giskard va dir

    Per això sempre desinstal·lar Transmission i instal·lar Deluge. Bé, per això i un pocotón de coses més que m'ofereix Deluge que l'altre no porta.

    1.    Joaquin va dir

      Hola, no conec Deluge. El meu problema principal és el servei d'Internet. Amb això ho exprimo a l'màxim.

  6.   panda va dir

    hola. el meu ample de banda també és limitat així k vaig provar aquest script. però no em funciona. l'error sembla ser en la comanda nethogs -t. retorna l'error «Waiting for first packet to arrive (see sourceforge.net error 1019381)» ja intenti en mint, en ArchLinux i res. que se suposa k hauria de tornar aquest comando? suposo k devería imprimir en text pla l'ample de banda usat x cada aplicació. coneixes altra programa k permeti escoltar la xarxa ??

    1.    Joaquin va dir

      Hola, com estàs.
      Aquest és un error de Nethogs. A mi també em apareix, però funciona de totes maneres.

      El que fa Nethogs és mostrar els processos que més ample de banda consumeixen, en temps real. En l'script, es guarda la seva sortida en un arxiu de text «net.lista», per poder filtrar-després.

      L'script només funciona amb Transmission (un client BitTorrent) i Firefox (navegador web). El que fa és limitar l'ample de banda de Transmission quan Firefox està carregant alguna pàgina web. Necessites instal·lar: Nethogs, Transmission, Transmission-remote i Firefox.

      Està tot explicat en el post, així que no sé quin és el teu problema.

      PD: Si us plau escriu correctament i millora la teva ortografia. És un comentari, no un missatge de texo.

      1.    panda va dir

        l'script no funciona per a mi. imprimeix moltes vegades aquest missatge d'error. executi «nethogs -t» en una terminal per veure que és el que fa però no imprimeix res, només l'error. en el meu pc no està funcionant. jo imaguino que hauria imprimir alguna cosa similar al que imprimeix a l'executar-lo sense el -t, mostrant els processos i l'ample de banda. però en el meu cas no imprimeix res d'això. qual distro vas fer servir per desenvolupar el script?

        1.    Joaquin va dir

          Si et fixes bé, en el post està tot el programari utilitzat i les seves versions. L'error no sé per què, però a mi també em apareix cada vegada que s'executa «nethogs -t». En l'script succeirà cada 2 ".

          Pot ser que en moment que executes nethogs, no hi hagi cap procés utilitzant la xarxa i per això no obtens cap sortida.

          L'script s'ha d'executar com a root perquè nethogs necessita d'aquest usuari per a funcionar.

          ara em vaig recordar d'alguna cosa important i sé per què no et funciona:

          HAS EDITAR l'script i canviar el nom de l'usuari normal. En l'script es diu «joaquin». Has canviar-ho pel nom del teu usuari.

          Perdó no em habiá adonat d'això, hauria d'haver posat el nom en una variable. El que passa és que no vaig pensar en fer-ho tan general, només volia mostrar-perquè el veiessin i els que vulguin puguin treure idees de com fer-ho. No ho vaig fer amb la intenció que funcionés en qualsevol equip, això porta temps i jo no sé programar, algunes coses em passen.

          Que tinguis sort, qualsevol cosa pregunta de nou. I si us plau llegeix de nou el post i els comentaris de l'script.

  7.   facundo va dir

    Hola Joaquim, em diu el següent:

    transmission-remote: (http://localhost:9091/transmission/rpc/) Could not connect to server
    ioctl failed while establishing local IP per a selected device eth0. Heu especificat la vostra adreça de comandament en línia.

    alguna idea ?? gràcies!

    1.    Joaquin va dir

      Hola, com estàs.
      Disculpame però no tinc ni idea 😀
      Pel que entenc que diu l'error, és un problema amb ioctl, però no sé què és això.

      Potser podries provar aturar el script i veure si funciona transmission-remote amb algunes de les seves opcions (llegeix la seva pàgina de manual amb la comanda «man»).