Script Bash: Styr automatisk transmissionens båndbredde

Hej allesammen. Dette er mit andet indlæg. Jeg skriver normalt ikke indlæg, medmindre jeg har noget godt at dele, og denne gang har jeg noget, som sikkert mange vil være interesseret i.

For et par måneder siden tænkte jeg på at lave et script til at begrænse båndbredden for applikationer, men jeg havde nogle problemer og fejl, der gjorde det vanskeligt for mig, så jeg rejste min tvivl i forum de <º DesdeLinux hvis nogen havde en idé.

Så jeg forlod det et stykke tid, og en dag besluttede jeg at genoptage scriptet. Jeg testede meget, jeg læste meget om bash, og jeg havde hovedpine i min fritid, men det gjorde jeg !!

Jeg har enorm tilfredshed, og derfor har jeg besluttet at dele mit lille script med dig, så du kan bruge og forbedre det. Jeg planlægger at licensere det under GPLv3, men det er mit første projekt, så jeg er ikke helt sikker på, hvordan jeg gør dette (jeg har brug for rådgivning fra den, der har gjort det før).

Nå, nu vil jeg forklare, hvad mit behov var, og hvad jeg gjorde for at løse problemet.

situationen
Jeg har en internetplan på 512 KB, derfor bruger jeg Transmissionsprojekter som BitTorrent-klient til at downloade store filer (som LibreOffice og nogle GNU / Linux-distroer). Med den hastighed tager downloads lang tid, og problemet er, når du bruger webbrowseren Firefox: tager lang tid at indlæse.

Når jeg opretter forbindelse til Internettet, aktiverer jeg tidsgrænserne for upload og overførsel af transmission og venter på, at Firefox indlæses, og start derefter torrents igen. Som du vil se, er det kedeligt at gøre dette et par gange. For ikke at nævne at nogle gange stopper jeg direkte alle torrents og glemmer derefter at aktivere dem igen, hvilket fører til spildt værdifuld tid til upload / download af torrents.

Opløsning
For dette problem besluttede jeg at oprette et script i Bash, der grundlæggende gør følgende:

1. Kontroller, at transmission kører, og ingen torrent er sat på pause. I så fald skal du tænde for torrents igen.

2. Kontroller, at Firefox kører. Derefter sendes og modtages KB / s af det og gemmer dem i en fil.

3. Hvis browseren upload / download KB / s overskrider et referenceområde, ændres indstillingerne for transmission af upload / download.

Dette giver mulighed for, at upload af overførselsfilen er begrænset, når browseren ønsker at få adgang til en webside, når browseren sender anmodningen, og når sidedataene modtages, er downloadet begrænset. Dette fungerer godt, når du får adgang til flere sider på én gang, og resultaterne er faktisk de samme som med transmission deaktiveret.

Den store fordel er, at den er fuldautomatisk og ikke kræver min indblanding.

Manuskriptet
Selvom det kunne bruges til at kontrollere båndbreddeforbruget til enhver applikation, er det i øjeblikket kun skrevet for at løse et meget specifikt problem. Men det er ikke meget svært at foretage ændringer.

Requisitos
For at det kan fungere korrekt, er det nødvendigt at have applikationen «netsvin'.

I dette tilfælde, da scriptet fungerer med Firefox og Transmission, er det nødvendigt at have disse applikationer installeret ud over "transmission-remote", som er den, der ændrer upload- og downloadværdierne for torrents. Jeg bruger også i scriptet "awk". Jeg nævner det, fordi jeg ikke ved, om alle distroer har det installeret.

Anvendt software
En liste over de applikationer, som scriptet bruger, og det system, hvor det fungerer.

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

Udførelse
Det skal køres som rod, fordi netsvin kan kun køres med den bruger, men transmission-fjernbetjening det udføres med den normale bruger ved hjælp af kommandoen su.

Scriptet bruger den interne Bash-kommando fælde Med hvilken det er muligt at gendanne standardværdierne for transmission belastning / aflæsning, når den stoppes af SIGINT (CTRL + c) eller SIGTERM signalerne.

Stadig ikke sikker på, hvordan man kører det ved opstart og stopper, når jeg lukker eller genstarter computeren. Jeg tænkte på at sætte et link i filen /etc/rc.local men jeg ved ikke, om det ville fungere, og jeg forstår ikke rigtig, hvordan / etc / fungererinit.d (Jeg så nogle scripts, der er der, selv skelet, men jeg forstår dem ikke). Hvis nogen kan hjælpe mig, vil jeg være meget taknemmelig.

Nå folkens, det er det. Jeg håber, at mit lille bidrag er nyttigt for dig, og at du kan forbedre det, hvis du ønsker det. Jeg vil med glæde læse dine meninger og anbefalinger samt forslag, hvis der er sikkerhedsproblemer med filen (jeg er ikke programmerer, jeg gør kun nogle få ting fra tid til anden).

Jeg ved, at det med nogle rettelser kan blive en god applikation i fremtiden, fordi jeg ikke kender noget program, der gør det samme. For eksempel forekommer det mig, at jeg kunne have en grafisk grænseflade i zenitet og at kunne vælge de applikationer, vi vil prioritere i brugen af ​​båndbredde (webbrowser, opdateringshåndtering, filoverførsel osv.) og de forskellige referenceværdier. Ja, det er noget ambitiøst, men ganske nyttigt.

Du kan downloade scriptet i pasta. Mange tak for læsningen !!


Efterlad din kommentar

Din e-mailadresse vil ikke blive offentliggjort. Obligatoriske felter er markeret med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Control SPAM, management af kommentarer.
  3. Legitimering: Dit samtykke
  4. Kommunikation af dataene: Dataene vil ikke blive kommunikeret til tredjemand, undtagen ved juridisk forpligtelse.
  5. Datalagring: Database hostet af Occentus Networks (EU)
  6. Rettigheder: Du kan til enhver tid begrænse, gendanne og slette dine oplysninger.

  1.   Elav sagde han

    Åh! Interessant 😀

    1.    eliotime3000 sagde han

      I nederste venstre hjørne har du mulighed for at begrænse båndbredden, som transmission bruger både ved upload og download. Med transmission har jeg ikke haft noget problem med det.

      1.    cookie sagde han

        Men dette er automatisk, og der er også transmission uden en grafisk grænseflade, så du har muligvis ikke den funktion så tæt ved hånden.

      2.    Joaquin sagde han

        Hej, hvordan går det.
        Ja det ved jeg allerede. Men det er netop det, jeg ikke vil gøre.
        Jeg har en meget dårlig internetplan (512 KB, og den er den bedste i mit område).

        Med mit script bekymrer jeg mig ikke om at gøre alt i hånden. Forestil dig, at du åbner en side i browseren, og transmission optager al båndbredde i det øjeblik, så siden tager et stykke tid at indlæse (højst 1 ′, men det er ubehageligt). Jeg er færdig med at "aktivere tidsgrænser" hvert andet minut. Dette er automatisk og næsten øjeblikkeligt (det kontrollerer KB sendt og modtaget af Firefox hvert 5. sekund).

        Virkelig i mit tilfælde med den internethastighed er den fremragende. Jeg kender heller ikke til en anden applikation, der gør dette, ellers ville det ikke have gjort det. Dem, jeg har set, begrænser kun båndbredde, men ikke automatisk.

        Jeg håber, jeg var klar. Tak fordi du læste!

        1.    Joaquin sagde han

          Undskyld, jeg tog fejl. De er ikke 512 KB, snarere er de Kbits. (Det vil sige 1/2 "Mega"). Det maksimale, jeg kan downloade, er 75 KB / s og 50 KB / s upload. Det er når Internettet er fint, ellers er det normale 48 og 23.

    2.    Joaquin sagde han

      Tak!

  2.   cookie sagde han

    Interessant, jeg bruger qBittorrent og bruger kontakten til grænser.

    Indlægget ser godt ud med disse farver 😉

    1.    Joaquin sagde han

      Tak for farverne. Jeg er ikke særlig god til det, det virker meget langt og ensformigt med så meget tekst.

  3.   Jorge sagde han

    Personligt bruger jeg transmission-dæmon og firefox med en live applikationsfane, så jeg går ikke med eksterne programmer eller glemmer at fortsætte torrents eller den aktiverede skildpadde (og jeg kan styre det fra min telefon). For at starte en tjeneste tilføjes en bruger (f.eks: adduser – deaktiveret-adgangskode nethogs), oprettes en tekstfil til dæmonen i /etc/init.d med et navn (f.eks: nethogs-dæmon) og derefter i debian er det skriv "update-rc.d nethogs-daemon standardindstillinger", så den starter op af sig selv.

    Tekstfilen er også et bash-script, som du kan flette dit script til.
    Se om dette kan hjælpe dig, det kan bruges til at starte transmission-dæmon, det kan bruges til at starte nethogs https://trac.transmissionbt.com/wiki/Scripts/initd

    1.    Joaquin sagde han

      Hej!
      Lad os se, om jeg forstår: dette er at starte transmission ved opstart og stoppe den, når du lukker ned eller genstarter. Med det har jeg ingen problemer, da det altid starter af sig selv og begynder at downloade (jeg tilføjede det til applikationerne ved opstart i Xfce).

      Mit problem er, at hvis jeg ikke placerer scriptet i rc.local eller init.d, ved jeg ikke, hvordan computeren stopper scriptet. Det vil sige, selvfølgelig, når man lukker / genstarter pc'en, afsluttes alle processer (og med dem også Transmission og Nethogs), men jeg ved ikke, hvad der ville ske med mit script.

      Og hvorfor generer det mig? Scriptet opretter en fil i / tmp og styrer transmissionens hastighed. Hvis jeg kører det i en terminal og pludselig stopper det (for eksempel med CTRL + c), gendannes scriptet før lukning standardhastighederne (i tilfælde af at det er nødvendigt) og stopper derefter Nethogs og sletter filen fra / tmp. Jeg forsøgte at gøre det så "professionelt" som muligt, så det ikke efterlod løse filer eller baggrundsprocesser.

      Om det, du sagde, forstod jeg ikke, hvad "fanen med live applikationer" er.

      1.    Jorge sagde han

        En applikationsfane er en permanent fane, den er altid åben og minimeret i Firefox http://i.imgur.com/a5i0aP3.png (kontekstmenu på fanen, klik på «Indsæt fanen»). Når dæmoner sender TERM-signal, venter de et stykke tid, indtil de er lukket, og gemmer deres data. Bemærk, at i det link, jeg gav før, da jeg forlod scriptet, kaldes start-stop-dæmon og beder transmission om at stoppe, der kan du indsætte "killall nethogs" og hvad den indeholder StopScript. Init-scriptet i dette tilfælde skal du kalde det som root i stedet for en bestemt bruger, da det har brug for privilegier.

        1.    Joaquin sagde han

          Nå tak for tipet. Så snart jeg har tid, prøver jeg det!

  4.   Facundo sagde han

    fantastisk, jeg er stødt på denne ulempe, da selvom du har en hurtig forbindelse, er du tvunget til at begrænse transmission, mens du vil surfe og dermed "spilde" tid.
    Jeg vil prøve det, når jeg kan. Hilsen og tak !!

    1.    Joaquin sagde han

      Tak til dig! Håber dette kan hjælpe dig!

      1.    Facundo. sagde han

        Hej igen Joaquin. Jeg ser, at du tager dig af at svare på alle kommentarerne, så jeg vil drage fordel af det, og jeg vil stille dig et par rookie-spørgsmål.
        For det første, hvordan ved jeg, om jeg har "awk" scriptet installeret? Jeg bruger Debian 7.2.
        For det andet ved jeg ikke, hvad jeg skal gøre med indsættelseskoden. Jeg er nødt til at få fat i en teksteditor og gemme den i en fil kaldet "bandwidth-controller.sh" og derefter køre den som "./band-width-control.sh". Dette er den del, hvor jeg er mest vild.
        For det tredje: Når du siger at køre det som root, er det nødvendigt at skifte fra bruger til root, eller er det nok med sudo?

        Hvis du har læsning til at anbefale mig om emnet, sætter jeg pris på det.
        Greetings!

  5.   giskard sagde han

    Derfor afinstallerer jeg altid transmission og installerer Deluge. Nå, for det og lidt flere ting, som Deluge tilbyder mig, som den anden ikke bringer.

    1.    Joaquin sagde han

      Hej, jeg kender ikke Deluge. Mit største problem er internettjenesten. Med dette klemmer jeg det fuldt ud.

  6.   panda sagde han

    Hej. min båndbredde er også begrænset, så jeg prøvede dette script. Men det fungerer ikke. fejlen ser ud til at være i nethogs -t kommandoen. det returnerer fejlen "Venter på, at den første pakke ankommer (se sourceforge.net bug 1019381)" Jeg prøvede mynte, archlinux og intet. Hvad skal denne kommando vende tilbage? Jeg formoder, at jeg skulle udskrive i almindelig tekst den båndbredde, der bruges af hver applikation. Kender du et andet program, der giver dig mulighed for at lytte til netværket?

    1.    Joaquin sagde han

      Hej, hvordan går det.
      Det er en Nethogs-bug. Det ser også ud til mig, men det fungerer alligevel.

      Hvad Nethogs gør er at vise de processer, der bruger mest båndbredde i realtid. I scriptet gemmes dets output i en tekstfil "net.list", så den kan filtreres senere.

      Scriptet fungerer kun med transmission (en BitTorrent-klient) og Firefox (webbrowser). Hvad det gør er at begrænse transmissionens båndbredde, når Firefox indlæser en webside. Du skal installere: Nethogs, Transmission, Transmission-remote og Firefox.

      Det hele forklares i indlægget, så jeg ved ikke, hvad dit problem er.

      PS: Skriv venligst korrekt, og forbedr din stavning. Det er en kommentar, ikke en tekstbesked.

      1.    panda sagde han

        scriptet virker ikke for mig. udskriver denne fejlmeddelelse mange gange. kør "nethogs -t" i en terminal for at se, hvad den gør, men den udskriver ikke noget, bare fejlen. på min pc fungerer det ikke. Jeg forestiller mig, at det skal udskrive noget, der ligner det, det udskriver, når det udføres uden -t, viser processer og båndbredde. men i mit tilfælde udskriver det ikke noget af det. hvilken distro brugte du til at udvikle scriptet?

        1.    Joaquin sagde han

          Hvis du ser nøje, indeholder indlægget al den anvendte software og dens versioner. Jeg ved ikke hvorfor fejlen, men det ser ud til mig hver gang "nethogs -t" køres. I scriptet sker det hver 2. ″.

          Det kan være, at når du kører nethogs, er der ingen proces ved hjælp af netværket, og det er derfor, du ikke får nogen output.

          Scriptet skal køres som root, fordi nethogs har brug for, at brugeren fungerer.

          nu huskede jeg noget vigtigt, og jeg ved, hvorfor det ikke virker for dig:

          DU SKAL redigere scriptet og ændre navnet på den normale bruger. I scriptet kaldes det "joaquin". Du skal ændre det til dit brugernavn.

          Beklager, jeg var ikke klar over det, jeg skulle have sat navnet i en variabel. Hvad der sker er, at jeg ikke tænkte på at gøre det så generelt, jeg ville bare vise det for dig, så du kan se det, og de, der ønsker, kan få ideer til, hvordan man gør det. Jeg gjorde det ikke med den hensigt, at det ville fungere på en hvilken som helst computer, der tager tid, og jeg ved ikke, hvordan jeg skal programmere, der sker nogle ting for mig.

          Held og lykke, alt spørg igen. Og læs venligst scriptets indlæg og kommentarer igen.

  7.   Facundo. sagde han

    Hej Joaquín, fortæl mig følgende:

    transmission-fjernbetjening: (http://localhost:9091/transmission/rpc/) Kunne ikke oprette forbindelse til serveren
    ioctl mislykkedes under oprettelse af lokal IP for valgt enhed eth0. Du kan angive enheden på kommandolinjen.

    nogle ideer?? tak!

    1.    Joaquin sagde han

      Hej, hvordan går det.
      Undskyld mig, men jeg har ingen idé 😀
      Fra hvad jeg forstår fejlen siger, er det et problem med ioctl, men jeg ved ikke, hvad det er.

      Måske kan du prøve at stoppe scriptet og se, om transmission-fjernbetjening fungerer med nogle af dens muligheder (læs dens man-side med kommandoen "mand").