Script Bash: Kontroller overføringsbåndbredde automatisk

Hei alle sammen. Dette er mitt andre innlegg. Jeg skriver vanligvis ikke innlegg med mindre jeg har noe godt å dele, og denne gangen har jeg noe som sikkert mange vil være interessert i.

For noen måneder siden tenkte jeg å lage et skript for å begrense båndbredden til applikasjoner, men jeg hadde noen problemer og feil som gjorde det vanskelig for meg, så jeg reiste spørsmålene mine i foro de <º DesdeLinux i tilfelle noen hadde en idé.

Så jeg lot det stå en stund, og en dag bestemte jeg meg for å gjenoppta manuset. Jeg testet mye, jeg leste mye om bash, og jeg hadde hodepine på fritiden, men jeg gjorde det !!

Jeg har enorm tilfredshet, og derfor har jeg bestemt meg for å dele med meg det lille skriptet ditt slik at du kan bruke og forbedre det. Jeg planlegger å lisensiere det under GPLv3, men det er mitt første prosjekt, så jeg er ikke helt sikker på hvordan jeg skal gjøre dette (jeg trenger råd fra den som har gjort det før).

Vel, nå skal jeg forklare hva mitt behov var og hva jeg gjorde for å løse problemet.

situación
Jeg har en Internett-plan på 512Kbs, derfor bruker jeg Transmission som BitTorrent-klient for å laste ned store filer (som LibreOffice og noen GNU / Linux-distroer). Med den hastigheten tar nedlastingene lang tid, og problemet er når du bruker nettleseren Firefox: tar lang tid å laste.

Når jeg kobler til Internett, aktiverer jeg overførings- og nedlastingsfrister for overføring og venter på at Firefox skal lastes inn, og starter deretter torrentene igjen. Som du vil se, er det kjedelig å gjøre dette et par ganger. For ikke å nevne at noen ganger stopper jeg direkte alle torrenter og glemmer å slå dem på igjen, noe som fører til bortkastet verdifull tid for torrentopplasting / nedlasting.

Oppløsning
For dette problemet bestemte jeg meg for å lage et skript i Bash som i utgangspunktet gjør følgende:

1. Kontroller at transmisjonen kjører, og at det ikke er noen torrentpauser. I så fall kan du slå på strømmen igjen.

2. Bekreft at Firefox kjører. Deretter blir KB / s sendt og mottatt av den og lagrer dem i en fil.

3. Hvis nettleserens opplasting / nedlasting KB / s overskrider et referanseområde, endres innstillingene for overføring / nedlasting av sending.

Dette gjør at når du vil ha tilgang til en webside, når nettleseren sender forespørselen, er overføringsfilopplastingen begrenset, og når sidedata mottas, er nedlastingen begrenset. Dette fungerer bra når du får tilgang til flere sider samtidig, og resultatene er faktisk de samme som med overføring deaktivert.

Den store fordelen er at den er helautomatisk og ikke krever min inngripen.

Manuset
Selv om det kan brukes til å kontrollere båndbreddeforbruket til ethvert program, er det for øyeblikket bare skrevet for å løse et veldig spesielt problem. Men det er ikke veldig vanskelig å gjøre endringer.

Krav
For at det skal fungere skikkelig er det nødvendig å ha applikasjonen «netthgs'.

I dette tilfellet, ettersom manuset fungerer med Firefox og Transmission, er det nødvendig å ha disse applikasjonene installert, i tillegg til "transmission-remote", som er det som endrer verdiene for opplasting og nedlasting av torrents. Jeg bruker også i skriptet "awk". Jeg nevner det fordi jeg ikke vet om alle distroene har det installert.

Programvare som brukes
En liste over applikasjonene som skriptet bruker og systemet der det fungerer.

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

Execution
Det må kjøres som rot fordi netthgs kan bare kjøres med den brukeren, men overførings-fjernkontroll den utføres med den vanlige brukeren ved hjelp av kommandoen su.

Skriptet bruker den interne Bash-kommandoen felle Med hvilket det er mulig å gjenopprette standardverdiene for overføringsbelastning / lossing, når den stoppes ved hjelp av SIGINT (CTRL + c) eller SIGTERM-signalene.

Fremdeles ikke sikker på hvordan jeg skal kjøre det ved oppstart og stopp når jeg slår av eller starter datamaskinen på nytt. Jeg tenkte å sette en lenke i filen /etc/rc.local men jeg vet ikke om det ville fungere, og jeg forstår egentlig ikke hvordan / etc / fungererinit.d (Jeg så noen skript som er der, til og med skjelett, men jeg forstår dem ikke). Hvis noen kan hjelpe meg, vil jeg være veldig takknemlig.

Vel folkens, det er det. Jeg håper at mitt lille bidrag er nyttig for deg, og at du kan forbedre det hvis du ønsker det. Jeg vil gjerne lese dine meninger og anbefalinger samt forslag i tilfelle det er sikkerhetsproblemer med filen (jeg er ikke programmerer, jeg gjør bare noen få ting fra tid til annen).

Jeg vet at det med noen reparasjoner kan bli en flott applikasjon i fremtiden, fordi jeg ikke vet om noe program som gjør det samme. For eksempel hender det meg at jeg kunne ha et grafisk grensesnitt i iver og å kunne velge applikasjonene vi ønsker å prioritere i bruk av båndbredde (nettleser, oppdateringsbehandling, filoverføring osv.) og de forskjellige referanseverdiene. Ja, det er noe ambisiøst, men ganske nyttig.

Du kan laste ned skriptet i pasta. Tusen takk for lesingen !!


Legg igjen kommentaren

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Kontroller SPAM, kommentaradministrasjon.
  3. Legitimering: Ditt samtykke
  4. Kommunikasjon av dataene: Dataene vil ikke bli kommunisert til tredjeparter bortsett fra ved juridisk forpliktelse.
  5. Datalagring: Database vert for Occentus Networks (EU)
  6. Rettigheter: Når som helst kan du begrense, gjenopprette og slette informasjonen din.

  1.   livlig sa

    Åh! Interessant 😀

    1.    eliotime3000. sa

      I nedre venstre hjørne har du muligheten til å begrense båndbredden som overføring bruker både ved opplasting og nedlasting. Med Transmission har jeg ikke hatt noe problem med det.

      1.    cookie sa

        Men dette er automatisk, og det er også overføring uten et grafisk grensesnitt, så du har kanskje ikke den funksjonen så nært.

      2.    Joaquin sa

        Hei, hvordan har du det.
        Ja det vet jeg allerede. Men det er akkurat det jeg ikke vil gjøre.
        Jeg har en veldig dårlig internettplan (512 KB, og den er den beste i mitt område).

        Med skriptet mitt bekymrer jeg meg ikke om å gjøre alt for hånd. Tenk deg at du åpner en side i nettleseren, og overføring opptar all båndbredden i det øyeblikket, så siden tar litt tid å laste inn (maksimalt 1 ′, men det er ubehagelig). Jeg er ferdig med å "aktivere tidsbegrensninger" hvert annet minutt. Dette er automatisk og nesten øyeblikkelig (det sjekker KB sendt og mottatt av Firefox hvert 5. sekund).

        Virkelig i mitt tilfelle med den internethastigheten, er den utmerket. Jeg vet heller ikke om et annet program som gjør dette, ellers hadde det ikke gjort det. De jeg har sett begrenser bare båndbredden, men ikke automatisk.

        Jeg håper jeg var klar. Takk for at du leser!

        1.    Joaquin sa

          Beklager, jeg tok feil. De er ikke 512 KB, men heller Kbits. (Det vil si 1/2 "Mega"). Maksimalt jeg kan laste ned er 75 KB / s og 50 KB / s opplasting. Det er da Internett er bra, ellers er det normale 48 og 23.

    2.    Joaquin sa

      Takk!

  2.   cookie sa

    Interessant, jeg bruker qBittorrent og bruker bryteren for grenser.

    Innlegget ser pent ut med de fargene 😉

    1.    Joaquin sa

      Takk for fargene. Jeg er ikke så god på det, det virker veldig langt og ensformig med så mye tekst.

  3.   Jorge sa

    Personlig bruker jeg transmission-daemon og firefox med en live applikasjonsfane, så jeg går ikke rundt med eksterne programmer eller glemmer å fortsette torrents eller den aktiverte skilpadden (og jeg kan kontrollere den fra telefonen min). For å starte en tjeneste blir en bruker lagt til (f.eks: adduser –disabled-password nethogs), en tekstfil for demonen opprettes i /etc/init.d med et navn (f.eks: nethogs-daemon) og deretter i debian er det skriv "update-rc.d nethogs-daemon standardinnstillinger" slik at den starter opp av seg selv.

    Tekstfilen er også et bash-skript, som du kan slå sammen skriptet ditt i.
    Se om dette kan hjelpe deg, den kan brukes til å starte overføringsdemonen, den kan brukes til å starte nethogs https://trac.transmissionbt.com/wiki/Scripts/initd

    1.    Joaquin sa

      Hei!
      La oss se om jeg forstår: dette er å starte overføring ved oppstart og stoppe den når du slår av eller starter på nytt. Med det har jeg ingen problemer siden den alltid starter av seg selv og begynner å laste ned (jeg la den til applikasjonene ved oppstart i Xfce).

      Problemet mitt er at hvis jeg legger skriptet i rc.local eller i init.d, vet jeg ikke hvordan datamaskinen stopper skriptet. Det vil si at åpenbart når du slår av / starter PCen, blir alle prosesser avsluttet (og med dem også Transmission og Nethogs), men jeg vet ikke hva som ville skje med skriptet mitt.

      Og hvorfor plager det meg? Skriptet oppretter en fil i / tmp og styrer overføringshastigheten. Hvis jeg kjører den i en terminal og plutselig stopper den (for eksempel med CTRL + c), gjenoppretter skriptet standardhastighetene (hvis nødvendig) før lukking, og deretter stopper Nethogs og sletter filen fra / tmp. Jeg prøvde å gjøre det så "profesjonelt" som mulig, slik at det ikke etterlater noen løse filer eller bakgrunnsprosesser.

      Om det du sa, forstod jeg ikke hva "live applikasjonsfanen" er.

      1.    Jorge sa

        En applikasjonsfane er en permanent fane, den er alltid åpen og minimert i Firefox http://i.imgur.com/a5i0aP3.png (kontekstmeny på fanen, klikk på «lim inn kategorien»). Når demonene sender TERM-signal, venter de en stund, til etter at de har avsluttet økten, og lagrer dataene. Vær oppmerksom på at i lenken jeg ga før når jeg avslutter skriptet, kalles start-stop-daemon og forteller overføring å stoppe, der kan du lime inn "killall nethogs" og hva den inneholder StopScript. Init-skriptet i dette tilfellet må du kalle det som root i stedet for en bestemt bruker, siden det trenger privilegier.

        1.    Joaquin sa

          Vel takk for tipset. Så snart jeg har tid prøver jeg det!

  4.   facundo sa

    flott, jeg har kommet over denne ulempen siden selv om du har en rask forbindelse, er du tvunget til å begrense overføring mens du vil bla og dermed "kaste bort" tid.
    Jeg skal prøve det når jeg kan. Hilsen og takk !!

    1.    Joaquin sa

      Takket være deg! Håper dette kan hjelpe deg!

      1.    facundo sa

        Hei igjen Joaquin. Jeg ser at du tar vare på å svare på alle kommentarene, så jeg kommer til å dra nytte av det, og jeg skal stille deg et par rookiespørsmål.
        Først, hvordan vet jeg om jeg har "awk" -skriptet installert? Jeg bruker Debian 7.2.
        For det andre vet jeg ikke hva jeg skal gjøre med limekoden. Jeg må ta en tekstredigerer og lagre den i en fil som heter "bandwidth-controller.sh" og deretter kjøre den som "./band-width-control.sh". Dette er den delen der jeg er mest fortapt.
        Tredje: Når du sier å kjøre det som root, er det nødvendig å bytte fra bruker til root, eller er det nok med sudo?

        Hvis du har noen lesing for å anbefale meg om emnet, setter jeg pris på det.
        Greetings!

  5.   giskard sa

    Derfor avinstallerer jeg alltid Transmission og installerer Deluge. Vel, for det og litt flere ting som Deluge tilbyr meg som den andre ikke bringer.

    1.    Joaquin sa

      Hei, jeg kjenner ikke Deluge. Mitt hovedproblem er internettjenesten. Med dette klemmer jeg det til fulle.

  6.   panda sa

    Hei. båndbredden min er også begrenset, så jeg prøvde dette skriptet. Men det fungerer ikke. feilen ser ut til å være i nethogs -t-kommandoen. returnerer feilen "Venter på at første pakke skal ankomme (se sourceforge.net bug 1019381)" Jeg prøvde mynte, archlinux og ingenting. Hva skal den kommandoen returnere? Jeg antar at jeg skal skrive ut båndbredden som brukes i hver applikasjon i ren tekst. Kjenner du et annet program som lar deg lytte til nettverket?

    1.    Joaquin sa

      Hei, hvordan har du det.
      Det er en Nethogs-feil. Det ser ut for meg også, men det fungerer uansett.

      Det Nethogs gjør er å vise prosessene som bruker mest båndbredde, i sanntid. I skriptet lagres utdataene i en tekstfil "net.list", slik at den kan filtreres senere.

      Skriptet fungerer bare med Transmission (en BitTorrent-klient) og Firefox (nettleser). Hva det gjør er å begrense sendingsbåndbredden når Firefox laster inn en webside. Du må installere: Nethogs, Transmission, Transmission-remote og Firefox.

      Alt er forklart i innlegget, så jeg vet ikke hva problemet ditt er.

      PS: Vennligst skriv riktig og forbedre stavemåten. Det er en kommentar, ikke en tekstmelding.

      1.    panda sa

        skriptet fungerer ikke for meg. skriver ut feilmeldingen mange ganger. kjør "nethogs -t" i en terminal for å se hva den gjør, men den skriver ikke ut noe, bare feilen. på min pc fungerer det ikke. Jeg ser for meg at den skal skrive ut noe som ligner på hva den skriver ut når den kjøres uten -t, og viser prosesser og båndbredde. men i mitt tilfelle skriver det ikke ut noe av det. hvilken distro brukte du for å utvikle manuset?

        1.    Joaquin sa

          Hvis du ser nøye etter, inneholder innlegget all programvaren som er brukt og versjonene. Jeg vet ikke hvorfor feilen, men den vises også hver gang "nethogs -t" kjøres. I skriptet vil det skje hver 2. ″.

          Det kan være at når du kjører nethogs, er det ingen prosess med å bruke nettverket, og det er derfor du ikke får noen utgang.

          Skriptet må kjøres som root fordi nethogs trenger at brukeren skal fungere.

          nå husket jeg noe viktig, og jeg vet hvorfor det ikke fungerer for deg:

          DU MÅ redigere skriptet og endre navnet på den vanlige brukeren. I manuset kalles det "joaquin". Du må endre det til brukernavnet ditt.

          Beklager at jeg ikke skjønte det, jeg burde ha satt navnet i en variabel. Det som skjer er at jeg ikke tenkte å gjøre det så generelt, jeg ville bare vise det til deg slik at du kan se det og de som vil kan få ideer om hvordan du gjør det. Jeg gjorde det ikke med den hensikt at det skulle fungere på en hvilken som helst datamaskin, det tar tid og jeg vet ikke hvordan jeg skal programmere, noen ting skjer med meg.

          Lykke til, alt spør igjen. Og les innlegget og kommentarene til manuset igjen.

  7.   facundo sa

    Hei Joaquín, fortell meg følgende:

    overførings-fjernkontroll: (http://localhost:9091/transmission/rpc/Kunne ikke koble til serveren
    ioctl mislyktes under etablering av lokal IP for valgt enhet eth0. Du kan spesifisere enheten på kommandolinjen.

    noen ideer?? Takk!

    1.    Joaquin sa

      Hei, hvordan har du det.
      Unnskyld meg, men jeg aner ikke 😀
      Fra det jeg forstår feilen sier, er det et problem med ioctl, men jeg vet ikke hva det er.

      Kanskje du kan prøve å stoppe skriptet og se om overførings-fjernkontroll fungerer med noen av alternativene (les man-siden med kommandoen "mann").