Script Bash: Kontrollera överföringsbandbredd automatiskt

Hej alla. Det här är mitt andra inlägg. Jag skriver vanligtvis inte inlägg om jag inte har något bra att dela och den här gången har jag något som säkert många kommer att vara intresserade av.

För några månader sedan funderade jag på att skapa ett manus för att begränsa bandbredden för applikationer, men jag hade några problem och fel som gjorde det svårt för mig, så jag tog upp min tvivel foro de <º Från Linux om någon hade en idé.

Så jag lämnade det ett tag och en dag bestämde jag mig för att återuppta skriptet. Jag testade mycket, jag läste mycket om bash och jag hade huvudvärk på fritiden, men jag gjorde det !!

Jag har enorm tillfredsställelse och därför har jag bestämt mig för att dela mitt lilla skript med dig så att du kan använda och förbättra det. Jag planerar att licensiera det under GPLv3, men det är mitt första projekt så jag är inte helt säker på hur man gör detta (jag behöver råd från den som har gjort det tidigare).

Tja, nu ska jag förklara vad mitt behov var och vad jag gjorde för att lösa problemet.

situación
Jag har en internetplan på 512Kbs, därför använder jag Växellåda som BitTorrent-klient för att ladda ner stora filer (som LibreOffice och vissa GNU / Linux-distributioner). Med den hastigheten tar nedladdningarna lång tid och problemet är när du använder webbläsaren firefox: tar lång tid att ladda.

När jag ansluter till Internet aktiverar jag sändningens tidsgränser för uppladdning och nedladdning och väntar på att Firefox laddas och startar sedan torrents igen. Som du kommer att se är det tråkigt att göra detta ett par gånger. För att inte tala om att jag ibland pausar alla torrenter direkt och sedan glömmer att aktivera dem igen, vilket leder till bortkastad värdefull tid för att ladda upp / ladda ner torrenterna.

Lösning
För detta problem bestämde jag mig för att skapa ett skript i Bash som i princip gör följande:

1. Kontrollera att sändningen är igång och ingen torrent är pausad. Om så är fallet, sätt på strömmen igen.

2. Kontrollera att Firefox körs. Sedan får KB / s skickas och tas emot av den och sparar dem i en fil.

3. Om webbläsaren laddar upp eller laddar ner KB / s överskrider ett referensområde ändras inställningarna för överföring / nedladdning av sändning.

Detta gör det möjligt att överföra överföringsfilen när webbläsaren skickar begäran, när överföringsfilen överförs är begränsad och när siddata tas emot är nedladdningen begränsad. Detta fungerar bra när du öppnar flera sidor samtidigt och resultaten är faktiskt desamma som när överföringen är inaktiverad.

Den stora fördelen är att den är helautomatisk och inte kräver mitt ingripande.

Manuskriptet
Även om den kan användas för att kontrollera bandbreddskonsumtionen för alla applikationer, är den för närvarande bara skriven för att lösa ett mycket speciellt problem. Men det är inte särskilt svårt att göra ändringar.

Krav
För att det ska fungera ordentligt är det nödvändigt att ha applikationen «näthogs".

I det här fallet, eftersom manuset fungerar med Firefox och Transmission, är det nödvändigt att ha dessa applikationer installerade, liksom "transmission-remote" vilket är det som ändrar uppladdnings- och nedladdningsvärdena för torrenterna. Jag använder också i manuset "awk". Jag nämner det eftersom jag inte vet om alla distro har det installerat.

Programvara som används
En lista över applikationer som manuset använder och systemet där det fungerar.

• Debian GNU / Linux 6.0.8
• Linux 2.6.32-5-686
• Firefox 24.0
• Växellåda 2.03 (11030)
• Nethogs 0.7.0

Utförande
Det måste köras som rot för näthogs kan bara köras med den användaren, men överförings-fjärrkontroll den körs med den normala användaren med hjälp av kommandot su.

Skriptet använder det interna Bash-kommandot fälla Med vilket det är möjligt att återställa standardvärdena för överföringsbelastning / lossning, när den stoppas med hjälp av SIGINT (CTRL + c) eller SIGTERM-signalerna.

Är fortfarande inte säker på hur man kör för att starta och stoppa när jag stänger av eller startar om datorn. Jag tänkte lägga in en länk i filen /etc/rc.local men jag vet inte om det skulle fungera, och jag förstår inte riktigt hur / etc / fungerarinit.d (Jag såg några manus som finns där, till och med skelett, men jag förstår dem inte). Om någon kan hjälpa mig blir jag väldigt tacksam.

Tja folkens, det är det. Jag hoppas att mitt lilla bidrag är användbart för dig och att du kan förbättra det om du vill. Jag läser gärna dina åsikter och rekommendationer samt förslag om det finns säkerhetsproblem med filen (jag är inte programmerare, jag gör bara några saker då och då).

Jag vet att det med vissa korrigeringar kan bli en bra applikation i framtiden, för jag känner inte till något program som gör detsamma. Till exempel tänker det mig att jag kan ha ett grafiskt gränssnitt i zenitet och för att kunna välja de applikationer som vi vill prioritera vid användning av bandbredd (webbläsare, uppdateringshanterare, filöverföring etc.) och olika referensvärden. Ja, det är något ambitiöst, men ganska användbart.

Du kan ladda ner skriptet i klistra. Tack så mycket för läsningen !!


Lämna din kommentar

Din e-postadress kommer inte att publiceras. Obligatoriska fält är markerade med *

*

*

  1. Ansvarig för uppgifterna: Miguel Ángel Gatón
  2. Syftet med uppgifterna: Kontrollera skräppost, kommentarhantering.
  3. Legitimering: Ditt samtycke
  4. Kommunikation av uppgifterna: Uppgifterna kommer inte att kommuniceras till tredje part förutom enligt laglig skyldighet.
  5. Datalagring: databas värd för Occentus Networks (EU)
  6. Rättigheter: När som helst kan du begränsa, återställa och radera din information.

      livlig sade

    åh! Intressant 😀

         eliotime3000 sade

      I det nedre vänstra hörnet har du möjlighet att begränsa bandbredden som sändningen förbrukar både vid uppladdning och nedladdning. Med Transmission har jag inte haft några problem med det.

           kaka sade

        Men det här är automatiskt, och det finns också sändning utan ett grafiskt gränssnitt så du kanske inte har den funktionen så nära till hands.

           Joaquin sade

        Hej hur mår du.
        Ja det vet jag redan. Men det är precis vad jag inte vill göra.
        Jag har en mycket dålig internetplan (512 KB och det är det bästa i mitt område).

        Med mitt manus oroar jag mig inte för att göra allt för hand. Tänk dig att du öppnar en sida i webbläsaren och sändningen upptar all bandbredd just nu, så det tar en stund att ladda sidan (högst 1 ′, men det är irriterande). Jag är klar med att "aktivera tidsgränser" varannan minut. Detta är automatiskt och nästan omedelbart (det kontrollerar KB som skickas och tas emot av Firefox var 5: e sekund).

        Verkligen i mitt fall med den internethastigheten är den utmärkt. Jag känner inte heller till någon annan applikation som gör detta, annars hade den inte gjort det. De jag har sett begränsar bara bandbredd, men inte automatiskt.

        Jag hoppas att jag var tydlig. Tack för att du läste!

             Joaquin sade

          Förlåt, jag hade fel. De är inte 512KB, utan de är Kbits. (Det vill säga 1/2 "Mega"). Det högsta jag kan ladda ner är 75KB / s och 50KB / s uppladdning. Det är då Internet är bra, annars är det normala 48 och 23.

         Joaquin sade

      Tack!

      kaka sade

    Intressant, jag använder qBittorrent och använder omkopplaren för gränser.

    Inlägget ser bra ut med de färgerna 😉

         Joaquin sade

      Tack för färgerna. Jag är inte så bra på det, det verkar väldigt långt och monotont med så mycket text.

      Jorge sade

    Personligen använder jag transmission-daemon och firefox med en live-applikationsflik, så jag går inte med externa program eller glömmer att fortsätta torrents eller den aktiverade sköldpaddan (och jag kan styra den från min telefon). För att starta en tjänst läggs en användare till (ex: adduser –disabled-password nethogs), en textfil för daemon skapas i /etc/init.d med ett namn (ex: nethogs-daemon) och sedan i debian är det skriv "update-rc.d nethogs-daemon standard" så att den startar av sig själv.

    Textfilen är också ett bash-skript som du kan slå ihop ditt skript till.
    Se om detta kan hjälpa dig, det kan användas för att starta överföringsdemon, det kan användas för att starta nethogs https://trac.transmissionbt.com/wiki/Scripts/initd

         Joaquin sade

      Hej!
      Låt oss se om jag förstår: detta är att starta sändningen vid start och stoppa den när du stänger av eller startar om. Med det har jag inga problem eftersom det alltid startar av sig själv och börjar ladda ner (jag lade till det i applikationerna vid start i Xfce).

      Mitt problem är att om jag lägger skriptet i rc.local eller i init.d vet jag inte hur datorn stoppar skriptet. Det är, uppenbarligen när du stänger av / startar om datorn avslutas alla processer (och med dem Transmission och Nethogs också) men jag vet inte vad som skulle hända med mitt manus.

      Och varför stör det mig? Skriptet skapar en fil i / tmp och styr överföringshastigheten. Om jag kör den i en terminal och plötsligt stoppar den (till exempel med CTRL + c) återställer skriptet innan stängning standardhastigheterna (om det är nödvändigt) och stoppar sedan Nethogs och tar bort filen från / tmp. Jag försökte göra det så "professionellt" som möjligt så att det inte lämnar några lösa filer eller bakgrundsprocesser.

      Om vad du sa förstod jag inte vad "fliken för levande applikationer" är.

           Jorge sade

        En applikationsflik är en permanent flik, den är alltid öppen och minimerad i Firefox http://i.imgur.com/a5i0aP3.png (snabbmenyn på fliken, klicka på «klistra in fliken»). När demonerna skickar TERM-signal väntar de en stund tills de har avslutat sessionen och sparar deras data. Lägg märke till att i länken jag gav tidigare när man lämnade skriptet kallas start-stop-daemon och säger att överföringen ska stoppas, där kan du klistra in "killall nethogs" och vad som finns i StopScript. Init-skriptet i det här fallet måste du kalla det som root istället för en specifik användare, eftersom det behöver behörigheter.

             Joaquin sade

          Tack för tipset. Så snart jag har tid försöker jag det!

      Facundo sade

    bra, jag har stött på denna nackdel eftersom även om du har en snabb anslutning är du tvungen att begränsa överföringen medan du vill surfa och därmed "slösa" tid.
    Jag ska prova det när jag kan. Hälsningar och tack !!

         Joaquin sade

      Tack vare dig! Hoppas det här kan hjälpa dig!

           Facundo sade

        Hej igen Joaquin. Jag ser att du tar hand om att svara på alla kommentarer så jag kommer att dra nytta av det och jag kommer att ställa dig ett par nybörjare frågor.
        Först, hur vet jag om jag har "awk" -skriptet installerat? Jag använder Debian 7.2.
        För det andra vet jag inte vad jag ska göra med klistra in koden. Jag måste ta en textredigerare och spara den i en fil som heter "bandwidth-controller.sh" och sedan köra den som "./band-width-controller.sh". Det här är den del där jag är mest vilse.
        För det tredje: När du säger att köra det som root, är det nödvändigt att byta från användare till root eller räcker det med sudo?

        Om du har någon läsning för att rekommendera mig om ämnet, uppskattar jag det.
        Hälsningar!

      giskard sade

    Det är därför jag alltid avinstallerar Transmission och installerar Deluge. Tja, för det och lite fler saker som Deluge erbjuder mig som den andra inte tar med sig.

         Joaquin sade

      Hej, jag känner inte Deluge. Mitt största problem är internettjänsten. Med detta klämmer jag det till fullo.

      panda sade

    Hej. min bandbredd är också begränsad så jag försökte det här skriptet. Men det fungerar inte. felet verkar finnas i kommandot nethogs -t. det returnerar felet "Väntar på att det första paketet kommer (se sourceforge.net bug 1019381)" och jag försökte mint, archlinux och ingenting. Vad ska kommandot återvända? Jag antar att jag ska skriva ut i vanlig text bandbredden som används av varje applikation. Känner du till ett annat program som låter dig lyssna på nätverket?

         Joaquin sade

      Hej hur mår du.
      Det är en Nethogs-bugg. Det verkar också för mig, men det fungerar ändå.

      Vad Nethogs gör är att visa de processer som förbrukar mest bandbredd i realtid. I skriptet sparas dess utdata i en textfil "net.list" så att den kan filtreras senare.

      Skriptet fungerar bara med Transmission (en BitTorrent-klient) och Firefox (webbläsare). Vad det gör är att begränsa överföringsbandbredden när Firefox laddar en webbsida. Du måste installera: Nethogs, Transmission, Transmission-remote och Firefox.

      Allt förklaras i inlägget, så jag vet inte vad ditt problem är.

      PS: Vänligen skriv korrekt och förbättra din stavning. Det är en kommentar, inte ett textmeddelande.

           panda sade

        manuset fungerar inte för mig. skriver ut felmeddelandet många gånger. kör "nethogs -t" i en terminal för att se vad den gör men den skriver inte ut något, bara felet. på min dator fungerar det inte. Jag föreställer mig att det ska skriva ut något som liknar vad det skrivs ut när det körs utan -t, visar processer och bandbredd. men i mitt fall skriver det inte ut något av det. vilken distro använde du för att utveckla manuset?

             Joaquin sade

          Om du tittar noga innehåller inlägget all programvara som används och dess versioner. Jag vet inte varför felet, men det verkar för mig varje gång "nethogs -t" körs. I skriptet händer det varannan ″.

          Det kan vara så att när du kör nethogs finns det ingen process med nätverket och det är därför du inte får någon produktion.

          Skriptet måste köras som root eftersom nethogs behöver den användaren för att fungera.

          nu kom jag ihåg något viktigt och jag vet varför det inte fungerar för dig:

          DU MÅSTE REDIGERA skriptet och ändra namnet på den vanliga användaren. I manuset kallas det "joaquin". Du måste ändra det till ditt användarnamn.

          Tyvärr insåg jag inte det, jag borde ha lagt namnet i en variabel. Vad som händer är att jag inte tänkte göra det så allmänt, jag ville bara visa det för dig så att du kan se det och de som vill kan få idéer om hur man gör det. Jag gjorde det inte med avsikt att det skulle fungera på någon dator, det tar tid och jag vet inte hur man programmerar, det händer vissa saker med mig.

          Lycka till, allt fråga igen. Och läs inlägget och kommentarerna i manuset igen.

      Facundo sade

    Hej Joaquín, berätta för mig följande:

    överförings-fjärrkontroll: (http://localhost:9091/transmission/rpc/) Det gick inte att ansluta till servern
    ioctl misslyckades vid upprättande av lokal IP för vald enhet eth0. Du kan ange enheten på kommandoraden.

    några idéer?? tack!

         Joaquin sade

      Hej hur mår du.
      Ursäkta mig men jag har ingen aning 😀
      Enligt vad jag förstår felet säger är det ett problem med ioctl, men jag vet inte vad det är.

      Kanske kan du försöka stoppa skriptet och se om transmission-remote fungerar med några av dess alternativ (läs dess mansida med kommandot "man").