Script Bash: beheer de transmissiebandbreedte automatisch

Dag iedereen. Dit is mijn tweede bericht. Normaal gesproken schrijf ik geen berichten, tenzij ik iets goeds te delen heb en deze keer heb ik iets waar velen zeker in geïnteresseerd zullen zijn.

Een paar maanden geleden dacht ik erover een script te maken om de bandbreedte van applicaties te beperken, maar ik had een aantal problemen en fouten die het me moeilijk maakten, dus uitte ik mijn twijfels in de foro de <º DesdeLinux Mocht iemand een idee hebben.

Ik liet het een tijdje zo en op een mooie dag besloot ik het script te hervatten. Ik heb veel getest, veel over bash gelezen en hoofdpijn gehad in mijn vrije tijd, maar het is me gelukt!!

Ik ben zeer tevreden en daarom heb ik besloten om mijn kleine script met je te delen zodat je het kunt gebruiken en verbeteren. Ik ben van plan het te licentiëren onder GPLv3, maar het is mijn eerste project, dus ik weet niet helemaal zeker hoe ik dit moet doen (ik heb advies nodig van degene die het eerder heeft gedaan).

Oké, nu zal ik uitleggen wat mijn behoefte was en wat ik deed om het probleem op te lossen.

situatie
Ik heb een internetabonnement van 512Kbs, daarom gebruik ik transmissie als een BitTorrent-client om grote bestanden te downloaden (zoals LibreOffice en sommige GNU/Linux-distributies). Met die snelheid duren downloads lang en het probleem is bij het gebruik van de webbrowser Firefox: het duurt lang om te laden.

Wanneer ik verbinding maak met internet, schakel ik de tijdelijke upload- en downloadlimieten van Transmission in en wacht ik tot Firefox is geladen, en begin dan opnieuw met torrenten. Zoals je zult zien, is het vervelend om dit een paar keer te doen. Om nog maar te zwijgen van het feit dat ik soms alle torrents pauzeer en dan vergeet ze weer in te schakelen, wat leidt tot kostbare tijdverspilling bij het uploaden/downloaden van torrents.

Oplossing
Voor dit probleem heb ik besloten om een ​​Bash-script te maken dat in principe het volgende doet:

1. Controleer of Transmission actief is en of er geen gepauzeerde torrents zijn. Schakel torrenting dan weer in.

2. Controleer of Firefox actief is. Vervolgens haalt het de KB/s op die erdoor zijn verzonden en ontvangen en slaat het op in een bestand.

3. Als het uploaden of downloaden van de browser KB/s een referentiebereik overschrijdt, worden de upload-/downloadwaarden van de verzending gewijzigd.

Dit maakt het mogelijk dat wanneer toegang tot een webpagina nodig is, wanneer de browser het verzoek verzendt, het uploaden van transmissiebestanden beperkt is en wanneer de paginagegevens worden ontvangen, het downloaden beperkt is. Dit werkt heel goed wanneer meerdere pagina's tegelijkertijd worden geopend en de resultaten zijn eigenlijk hetzelfde als wanneer Verzending is uitgeschakeld.

Het grote voordeel is dat het volledig automatisch gaat en mijn tussenkomst niet nodig is.

Het script
Hoewel het kan worden gebruikt om het bandbreedteverbruik van elke toepassing te regelen, is het op dit moment alleen geschreven om een ​​heel specifiek probleem op te lossen. Maar het is niet erg moeilijk om wijzigingen aan te brengen.

Eisen
Om correct te werken, is het noodzakelijk dat de applicatie is geïnstalleerd «netzwijnen.

In dit geval, aangezien het script werkt met Firefox en Transmission, is het noodzakelijk om deze applicaties te installeren, naast "transmission-remote", dat is degene die de upload- en downloadwaarden van de torrents verandert. Ik gebruik ook in het "awk" -script. Ik noem het omdat ik niet weet of alle distro's het hebben geïnstalleerd.

Gebruikte software
Een lijst met de toepassingen die het script gebruikt en het systeem waarop het wordt uitgevoerd.

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

Uitvoering
Het moet als root worden uitgevoerd omdat netzwijnen kan alleen worden uitgevoerd als die gebruiker, maar transmissie-afstandsbediening Het wordt uitgevoerd met de normale gebruiker door middel van het commando su.

Het script gebruikt de ingebouwde Bash-opdracht val waarmee het mogelijk is om de standaardwaarden voor het uploaden/downloaden van de transmissie te herstellen, wanneer het wordt gestopt door middel van de SIGINT (CTRL+c) of SIGTERM signalen.

Ik weet nog steeds niet hoe ik het moet laten werken bij het opstarten en stoppen wanneer ik de computer afsluit of opnieuw opstart. Ik zat er aan te denken om een ​​link in het bestand te plaatsen /etc/rc.local maar ik weet niet of het zou werken, en ik begrijp niet echt hoe /etc/ werktbegin.d (Ik zag daar enkele scripts, waaronder skelet, maar ik versta ze niet). Als iemand mij kan helpen, zal ik zeer dankbaar zijn.

Nou vrienden, dat is het. Ik hoop dat mijn kleine bijdrage nuttig voor u is en dat u deze kunt verbeteren als u dat wenst. Ik lees graag uw mening en aanbevelingen, evenals suggesties voor het geval er beveiligingsproblemen zijn met het bestand (ik ben geen programmeur, ik doe gewoon af en toe een paar dingen).

Ik weet dat het met enkele fixes in de toekomst een geweldige applicatie kan worden, omdat ik geen enkel programma ken dat hetzelfde doet. Het komt bijvoorbeeld in me op dat ik er een grafische interface in zou kunnen hebben zeniteit en om de applicaties te kunnen kiezen die we prioriteit willen geven bij het gebruik van bandbreedte (webbrowser, updatemanager, bestandsoverdracht, enz.) en de verschillende referentiewaarden. Ja, het is enigszins ambitieus, maar best nuttig.

U kunt het script downloaden op pasta. Heel erg bedankt voor het lezen!!


Laat je reactie achter

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *

*

*

  1. Verantwoordelijk voor de gegevens: Miguel Ángel Gatón
  2. Doel van de gegevens: Controle SPAM, commentaarbeheer.
  3. Legitimatie: uw toestemming
  4. Mededeling van de gegevens: De gegevens worden niet aan derden meegedeeld, behalve op grond van wettelijke verplichting.
  5. Gegevensopslag: database gehost door Occentus Networks (EU)
  6. Rechten: u kunt uw gegevens op elk moment beperken, herstellen en verwijderen.

  1.   levendig zei

    Oh! Interessant 😀

    1.    eliotime3000 zei

      In de linkerbenedenhoek heb je de optie om de bandbreedte die wordt verbruikt door Transmission te beperken, zowel bij uploaden als downloaden. Met Transmissie heb ik er geen enkel probleem mee gehad.

      1.    koekje zei

        Maar dit is automatisch, en er is ook Transmission zonder grafische interface, dus misschien heb je die functie niet zo bij de hand.

      2.    Joaquin zei

        Hallo hoe gaat het.
        Ja dat weet ik al. Maar dat is precies wat ik niet wil doen.
        Ik heb een heel slecht internetabonnement (512 KB en het is het beste in mijn regio).

        Met mijn script hoef ik me geen zorgen te maken dat ik alles met de hand moet doen. Stel je voor dat je een pagina in de browser opent en Transmission op dat moment alle bandbreedte in beslag neemt, dus het duurt even voordat de pagina is geladen (hoogstens 1', maar dat is frustrerend). Ik heb genoeg van "het activeren van tijdslimieten" om de paar minuten. Dit is automatisch en bijna onmiddellijk (het controleert elke 5 seconden de KB die door Firefox is verzonden en ontvangen).

        Eigenlijk is het in mijn geval met die internetsnelheid uitstekend. Ik ken ook geen andere app die dit doet, anders had ik het niet gedaan. Degenen die ik heb gezien beperken alleen de bandbreedte, maar niet automatisch.

        Ik hoop dat ik duidelijk was. Bedankt voor het lezen!

        1.    Joaquin zei

          Sorry, ik heb me slecht uitgedrukt. Ze zijn niet 512KB, het zijn eerder Kbits. (Dat wil zeggen, 1/2 "Mega"). Het maximum dat ik kan downloaden is 75KB/s en upload 50KB/s. Dat als internet goed werkt, anders is 48 en 23 normaal.

    2.    Joaquin zei

      Dank je wel!

  2.   koekje zei

    Interessant, ik gebruik qBittorrent en ik gebruik de schakelaar voor limieten.

    De post ziet er prachtig uit met die kleuren 😉

    1.    Joaquin zei

      Bedankt voor de kleuren. Ik ben er niet zo goed in, het lijkt erg lang en eentonig met zoveel tekst.

  3.   jorge zei

    Persoonlijk gebruik ik transmissie-daemon en firefox met live applicatietabblad, dus ik ga niet rond met externe programma's of vergeet door te gaan met torrenting of schildpad geactiveerd (en ik kan het vanaf mijn telefoon bedienen). Om een ​​service te starten, voegt u een gebruiker toe (bijv.: adduser --disabled-password nethogs), maakt u een tekstbestand voor de daemon in /etc/init.d met een naam (bijv.: nethogs-daemon) en typt u vervolgens in debian " update-rc.d nethogs-daemon defaults” om het zelf te starten.

    Het tekstbestand is ook een bash-script, waarin u uw script kunt samenvoegen.
    Kijk of dit je kan helpen, het kan worden gebruikt om transmissie-daemon automatisch te starten, het kan worden gebruikt om nethogs automatisch te starten https://trac.transmissionbt.com/wiki/Scripts/initd

    1.    Joaquin zei

      Hello!
      Laten we dit duidelijk maken: dit is om Transmission te starten bij het opstarten en te stoppen bij afsluiten of opnieuw opstarten. Ik heb daar geen probleem mee omdat het zichzelf altijd opstart en begint met downloaden (ik heb het toegevoegd aan applicaties bij het opstarten in Xfce).

      Mijn probleem is dat als ik het script in rc.local of init.d plaats, ik niet weet hoe de host het script stopt. Met andere woorden, uiteraard worden bij het afsluiten/opnieuw opstarten van de pc alle processen beëindigd (en daarmee ook Transmission en Nethogs), maar ik weet niet wat er met mijn script zou gebeuren.

      En waarom maak ik me daar zorgen over? Het script maakt een bestand aan in /tmp en regelt de transmissiesnelheid. Als ik het in een terminal uitvoer en het plotseling stop (bijvoorbeeld met CTRL + c), voordat het script wordt afgesloten, herstelt het de standaardsnelheden (indien nodig) en stopt dan Nethogs en verwijdert het bestand uit /tmp. Ik heb geprobeerd het zo "professioneel" mogelijk te maken, zodat er geen bestanden of achtergrondprocessen achterblijven.

      Over wat je zei, ik begreep niet wat "live applicatietabblad" is.

      1.    jorge zei

        Een applicatietabblad is een permanent tabblad, het is altijd open en geminimaliseerd binnen firefox. http://i.imgur.com/a5i0aP3.png (contextmenu op tabblad, klik op "tabblad plakken"). De daemons wachten bij het verzenden van het TERM-signaal even, tot na het afsluiten van de sessie, en slaan hun gegevens op. Merk op dat in de link die ik eerder gaf bij het afsluiten van het script het start-stop-daemon aanroept en de transmissie vertelt om te stoppen, daar zou je "killall nethogs" kunnen plakken en wat StopScript bevat. Het init-script moet in dit geval als root worden aangeroepen in plaats van als een specifieke gebruiker, omdat het privileges nodig heeft.

        1.    Joaquin zei

          Wel bedankt voor de info. Ik ga het proberen zodra ik tijd heb!

  4.   Facundo zei

    geweldig, ik heb dit ongemak ondervonden, want zelfs als je een snelle verbinding hebt, ben je gedwongen om de transmissie te beperken terwijl je wilt navigeren en dus tijd "verspillen".
    Ik zal het proberen wanneer ik kan. Groetjes en bedankt!!

    1.    Joaquin zei

      Dankzij jou! Ik hoop dat dit je kan helpen!

      1.    Facundo zei

        Nogmaals hallo Joaquín. Ik zie dat je ervoor zorgt dat alle opmerkingen worden beantwoord, dus daar ga ik gebruik van maken en ik ga je een paar beginnersvragen stellen.
        Ten eerste, hoe weet ik of ik het "awk"-script heb geïnstalleerd? Ik gebruik Debian 7.2.
        Ten tweede weet ik niet goed wat ik met de plakcode moet doen. Ik moet een teksteditor pakken en deze opslaan in een bestand met de naam "control-bandwidth.sh" en het vervolgens uitvoeren als "./control-bandwidth.sh". Dit is het deel waar ik het meest verdwaald ben.
        Ten derde: als je zegt het als root uit te voeren, is het dan nodig om de gebruiker te wijzigen in root of is sudo genoeg?

        Als u wat te lezen heeft om mij over dit onderwerp aan te bevelen, zou ik dat op prijs stellen.
        Groeten!

  5.   giskard zei

    Daarom verwijder ik altijd Transmission en installeer ik Deluge. Welnu, daarvoor en een paar andere dingen die Deluge mij biedt die de andere niet biedt.

    1.    Joaquin zei

      Hallo, ik ken Deluge niet. Mijn grootste probleem is de internetservice. Hiermee pers ik het maximaal.

  6.   panda zei

    Hallo. mijn bandbreedte is ook beperkt, dus ik heb dit script geprobeerd. Maar het werkt niet. de fout lijkt te zitten in het commando nethogs -t. geeft de foutmelding "Waiting for first packet to arrive (zie sourceforge.net bug 1019381)" en geprobeerd in mint, in archlinux en niets. Wat moet dat commando teruggeven? Ik veronderstel dat ik in platte tekst de bandbreedte moet afdrukken die door elke toepassing wordt gebruikt. Kent u een ander programma waarmee u naar het netwerk kunt luisteren?

    1.    Joaquin zei

      Hallo hoe gaat het.
      Dat is een fout van Nethogs. Lijkt mij ook, maar het werkt toch.

      Wat Nethogs doet, is in realtime de processen laten zien die de meeste bandbreedte verbruiken. Het script slaat de uitvoer op in een tekstbestand "net.list", zodat het later kan worden gefilterd.

      Het script werkt alleen met Transmission (een BitTorrent-client) en Firefox (webbrowser). Wat het doet, is de bandbreedte van Transmission beperken wanneer Firefox een webpagina laadt. U moet installeren: Nethogs, Transmission, Transmission-remote en Firefox.

      Het staat allemaal uitgelegd in de post, dus ik weet niet wat je probleem is.

      PS: schrijf alstublieft correct en verbeter uw spelling. Het is een opmerking, geen sms.

      1.    panda zei

        bij mij werkt het script niet. het drukt die foutmelding vele malen af. voer "nethogs -t" uit in een terminal om te zien wat het doet, maar het drukt niets af, alleen de fout. op mijn pc werkt het niet. Ik stel me voor dat het iets zou moeten afdrukken dat lijkt op wat het afdrukt wanneer het wordt uitgevoerd zonder de -t, waarbij de processen en de bandbreedte worden weergegeven. maar in mijn geval wordt daar niets van afgedrukt. welke distro heb je gebruikt om het script te ontwikkelen?

        1.    Joaquin zei

          Als je goed kijkt, bevat de post alle gebruikte software en de versies ervan. De fout weet ik niet waarom, maar het lijkt me ook elke keer dat "nethogs -t" wordt uitgevoerd. In het script zal het elke 2″ gebeuren.

          Het kan zijn dat op het moment dat u nethogs uitvoert, er geen proces is dat het netwerk gebruikt en u daarom geen output krijgt.

          Het script moet als root worden uitgevoerd omdat nethogs die gebruiker nodig heeft om te werken.

          Nu herinnerde ik me iets belangrijks en ik weet waarom het niet voor jou werkt:

          U MOET het script BEWERKEN en de naam van de normale gebruiker wijzigen. In het script wordt het "joaquin" genoemd. U moet deze wijzigen in de naam van uw gebruiker.

          Sorry, dat had ik niet door, ik had de naam in een variabele moeten zetten. Het punt is dat ik er niet aan dacht om het zo algemeen te maken, ik wilde ze alleen laten zien zodat iedereen die wil ideeën kan opdoen over hoe het te doen. Ik deed het niet met de bedoeling om het op elke computer te laten werken, dat kost tijd en ik weet niet hoe ik moet programmeren, sommige dingen mis ik.

          Veel succes, alles opnieuw vragen. En lees het bericht en de opmerkingen van het script opnieuw.

  7.   Facundo zei

    Hallo Joaquín, het zegt me het volgende:

    transmissie-afstandsbediening: (http://localhost:9091/transmission/rpc/) Kan geen verbinding maken met de server
    ioctl is mislukt bij het instellen van een lokaal IP-adres voor het geselecteerde apparaat eth0. U kunt het apparaat specificeren op de opdrachtregel.

    om het even welke ideeën?? Bedankt!

    1.    Joaquin zei

      Hallo hoe gaat het.
      Sorry maar ik heb geen idee 😀
      Van wat ik begrijp, is wat de fout zegt een probleem met ioctl, maar ik weet niet wat dat is.

      Misschien kunt u proberen het script te stoppen en kijken of transmissie-remote werkt met enkele van zijn opties (lees zijn man-pagina met het "man"-commando).