Script Bash: Automaticky riadte šírku pásma prenosu

Ahojte všetci. Toto je môj druhý príspevok. Zvyčajne nepíšem príspevky, pokiaľ nemám niečo dobré na zdieľanie a tentoraz mám niečo, čo určite mnohých zaujme.

Pred niekoľkými mesiacmi som uvažoval o vytvorení skriptu na obmedzenie šírky pásma aplikácií, mal som však problémy a chyby, ktoré mi to sťažovali, a tak som vzbudil pochybnosti v forum de <º DesdeLinux pre prípad, že by niekto mal nápad.

Takže som to na chvíľu nechal a jedného dňa som sa rozhodol pokračovať v scenári. Veľa som testoval, veľa som čítal o bash a vo voľnom čase som mal bolesti hlavy, ale urobil som to !!

Som nesmierne spokojný, a preto som sa rozhodol zdieľať s vami môj malý scenár, aby ste ho mohli použiť a vylepšiť. Plánujem to licencovať na základe GPLv3, ale je to môj prvý projekt, takže si nie som celkom istý, ako to urobiť (potrebujem radu od toho, kto to urobil už predtým).

Teraz však vysvetlím, čo som potreboval a čo som urobil pre vyriešenie problému.

Situácia
Mám internetový plán 512 kB, preto ho používam Prevodovka ako klient BitTorrent na sťahovanie veľkých súborov (napríklad LibreOffice a niektoré distribúcie GNU / Linux). S touto rýchlosťou sťahovanie trvá dlho a problém je pri používaní webového prehliadača Firefox: načítanie trvá dlho.

Keď sa pripájam na internet, aktivujem časové limity nahrávania a sťahovania Transmission a čakám na načítanie Firefoxu, potom spustím torrenty znova. Ako uvidíte, niekoľkokrát je to zdĺhavé. Nehovoriac o tom, že niekedy úplne pozastavím všetky torrenty a potom ich zabudnem znova aktivovať, čo vedie k strateniu drahocenného času na nahrávanie / sťahovanie torrentov.

Riešenie
Pre tento problém som sa rozhodol vytvoriť v Bash skript, ktorý v zásade robí nasledujúce:

1. Skontrolujte, či je prenos spustený a či nie je pozastavený torrent. Ak je to tak, torrenty znova zapnite.

2. Skontrolujte, či je Firefox spustený. Potom dostane odoslané a prijaté KB / s a ​​uloží ich do súboru.

3. Ak načítanie alebo sťahovanie súborov do prehliadača prekročí referenčný rozsah, nastavenia prenosu a načítania sa zmenia.

To umožňuje, že keď prehliadač odošle požiadavku, keď chce získať prístup na webovú stránku, je obmedzené načítanie prenosového súboru a pri prijatí údajov o stránke je obmedzené načítanie. Toto funguje skvele pri prístupe k viacerým stránkam naraz a výsledky sú v skutočnosti rovnaké ako pri zakázanom prenose.

Veľkou výhodou je, že je plne automatický a nevyžaduje môj zásah.

Scenár
Aj keď by sa dal použiť na riadenie spotreby šírky pásma akejkoľvek aplikácie, momentálne je napísaný iba na vyriešenie veľmi konkrétneho problému. Nie je ale veľmi ťažké vykonať úpravy.

Požiadavky
Pre správne fungovanie je potrebné mať aplikáciu «nethogs".

V takom prípade, pretože skript pracuje s prehliadačmi Firefox a Transmission, je potrebné mať nainštalované aj tieto aplikácie, a to okrem príkazu „remote-remote“, ktorý mení hodnoty uploadu a downloadu torrentov. Používam aj v scenári „awk“. Spomínam to, pretože neviem, či to majú nainštalované všetky distribúcie.

Použitý softvér
Zoznam aplikácií, ktoré skript používa, a systém, v ktorom pracuje.

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

Prevedenie
Musí byť spustený ako root, pretože nethogs je možné spustiť iba s týmto používateľom, ale diaľkový prenos vykonáva sa s bežným používateľom pomocou príkazu jeho.

Skript používa interný príkaz Bash past Pomocou ktorých je možné obnoviť predvolené hodnoty prenosu / načítania, keď sa zastaví pomocou signálov SIGINT (CTRL + c) alebo SIGTERM.

Stále si nie ste istí, ako to spustiť pri štarte a zastaviť, keď vypnem alebo reštartujem počítač. Rozmýšľal som, že do súboru vložím odkaz /etc/rc.local ale neviem, či by to fungovalo, a vlastne nechápem, ako funguje / etc /init.d (Videl som nejaké skripty, ktoré tam sú, dokonca kostra, ale nerozumiem im). Ak mi niekto pomôže, budem veľmi vďačný.

No tak ľudia, to je všetko. Dúfam, že môj malý príspevok je pre vás užitočný a že ho môžete podľa potreby vylepšiť. Rád si prečítam vaše názory a odporúčania, ako aj návrhy v prípade, že sa vyskytnú bezpečnostné problémy so súborom (nie som programátor, z času na čas urobím iba pár vecí).

Viem, že s niektorými opravami sa to v budúcnosti môže stať vynikajúcou aplikáciou, pretože neviem o žiadnom programe, ktorý by robil to isté. Napríklad mi napadne, že by som mohol mať grafické rozhranie v zenita a mať možnosť zvoliť si aplikácie, ktoré chceme uprednostniť pri využívaní šírky pásma (webový prehliadač, správca aktualizácií, prenos súborov atď.) a rôzne referenčné hodnoty. Áno, je to trochu ambiciózne, ale celkom užitočné.

Skript si môžete stiahnuť v cestoviny. Ďakujem veľmi pekne za prečítanie !!


Zanechajte svoj komentár

Vaša e-mailová adresa nebude zverejnená. Povinné položky sú označené *

*

*

  1. Zodpovedný za údaje: Miguel Ángel Gatón
  2. Účel údajov: Kontrolný SPAM, správa komentárov.
  3. Legitimácia: Váš súhlas
  4. Oznamovanie údajov: Údaje nebudú poskytnuté tretím stranám, iba ak to vyplýva zo zákona.
  5. Ukladanie dát: Databáza hostená spoločnosťou Occentus Networks (EU)
  6. Práva: Svoje údaje môžete kedykoľvek obmedziť, obnoviť a vymazať.

  1.   živý dijo

    Och! Zaujímavé 😀

    1.    eliotime3000 dijo

      V ľavom dolnom rohu máte možnosť obmedziť šírku pásma, ktorú Transmission spotrebuje pri nahrávaní aj sťahovaní. S prevodovkou som s tým nemal žiadny problém.

      1.    sušienka dijo

        Je to však automatické a existuje aj prevodovka bez grafického rozhrania, takže túto funkciu nemusíte mať tak blízko po ruke.

      2.    Joaquin dijo

        Ahoj ako sa máš.
        Áno, už to viem. Ale to je presne to, čo nechcem robiť.
        Mám veľmi zlý internetový plán (512 kB a je to najlepší v mojom okolí).

        So svojím scenárom si nerobím starosti s tým, že budem robiť všetko ručne. Predstavte si, že otvoríte stránku v prehliadači a prenos v danom okamihu zaberá celú šírku pásma, takže načítanie stránky trvá chvíľu (najviac 1 ′, ale je to vzrušujúce). „Aktivácia časových limitov“ som skončila každé dve minúty. Je to automatické a takmer okamžité (každých 5 sekúnd kontroluje KB odosielané a prijímané prehliadačom Firefox).

        Naozaj v mojom prípade s tou rýchlosťou internetu je to vynikajúce. Tiež neviem o inej aplikácii, ktorá by to robila, inak by to neurobila. Tie, ktoré som videl, iba obmedzujú šírku pásma, ale nie automaticky.

        Dúfam, že som mal jasno. Ďakujem za čítanie!

        1.    Joaquin dijo

          Prepáč, mýlil som sa. Nie sú 512 kB, skôr sú to kbity. (To znamená 1/2 „Mega“). Maximum, ktoré môžem stiahnuť, je 75 kB / s a ​​nahrávanie 50 kB / s. To je prípad, keď je internet v poriadku, inak je normálne 48 a 23.

    2.    Joaquin dijo

      Vďaka!

  2.   sušienka dijo

    Je zaujímavé, že používam qBittorrent a prepínač obmedzujem.

    S tými farbami vyzerá príspevok pekne 😉

    1.    Joaquin dijo

      Ďakujem za farby. Nie som v tom moc dobrý, zdá sa mi to veľmi dlhé a monotónne s toľkým textom.

  3.   Jorge dijo

    Osobne používam prevodový démon a firefox so živou kartou aplikácie, takže nechodím s externými programami ani nezabúdam pokračovať v torrentoch alebo aktivovanej korytnačke (a môžem to ovládať z telefónu). Na spustenie služby je pridaný užívateľ (napr. Adduser –zakázané heslo nethogs), v /etc/init.d je vytvorený textový súbor pre démona s menom (napr. Nethogs-daemon) a potom v debiane je zadajte „update-rc.d nethogs-daemon defaults“, aby sa spustil sám.

    Textový súbor je tiež bash skript, do ktorého môžete skript zlúčiť.
    Uvidíme, či ti to pomôže, dá sa to použiť na spustenie démona prenosu, dá sa to použiť na spustenie nethogov https://trac.transmissionbt.com/wiki/Scripts/initd

    1.    Joaquin dijo

      Dobrý deň!
      Pozrime sa, či rozumiem: toto má spustiť prenos pri štarte a zastaviť ho pri vypínaní alebo reštartovaní. S tým nemám problémy, pretože sa to vždy spustí samo a začne sa sťahovať (pridal som to do aplikácií pri štarte v Xfce).

      Môj problém je, že ak umiestnim skript do súboru rc.local alebo do súboru init.d, neviem, ako počítač skript zastaví. To znamená, že samozrejme pri vypnutí / reštartovaní počítača sú všetky procesy ukončené (a s nimi aj Transmission a Nethogs), ale neviem, čo by sa stalo s mojím skriptom.

      A prečo mi to prekáža? Skript vytvorí súbor v / tmp a riadi rýchlosť prenosu. Ak ho spustím v termináli a náhle ho zastavím (napríklad pomocou CTRL + c), skript pred zatvorením obnoví predvolené rýchlosti (v prípade potreby) a potom zastaví Nethogs a vymaže súbor z / tmp. Snažil som sa, aby to bolo čo najprofesionálnejšie, aby nezanechával voľné súbory ani procesy na pozadí.

      O tom, čo ste povedali, som nechápal, čo je to „živá karta aplikácie“.

      1.    Jorge dijo

        Karta aplikácie je trvalá karta, ktorá je v prehliadači Firefox vždy otvorená a minimalizovaná http://i.imgur.com/a5i0aP3.png (kontextové menu na karte, kliknite na «vložiť kartu»). Keď démoni pošlú TERM signál, chvíľu počkajú, kým ukončia reláciu, a uložia svoje údaje. Všimnite si, že do odkazu, ktorý som dal predtým pri ukončení skriptu, volá start-stop-daemon a hovorí prenosu, aby sa zastavil, tam by ste mohli vložiť „killall nethogs“ a čo obsahuje StopScript. Inicializačný skript by ste v tomto prípade museli volať ako root namiesto konkrétneho používateľa, pretože potrebuje privilégiá.

        1.    Joaquin dijo

          No ďakujem za tip. Len čo budem mať čas, vyskúšam to!

  4.   facundo dijo

    super, narazil som na túto nepríjemnosť, pretože aj keď máte rýchle pripojenie, ste nútení obmedziť prenos, keď chcete listovať, a tak „strácať“ čas.
    Idem to vyskúšať, keď budem môcť. Zdravím a ďakujem !!

    1.    Joaquin dijo

      Vďaka tebe! Dúfam, že vám to môže pomôcť!

      1.    facundo dijo

        Ahoj ešte raz Joaquin. Vidím, že sa staráte o reakciu na všetky komentáre, takže to využijem a položím vám niekoľko nováčikovských otázok.
        Po prvé, ako zistím, či mám nainštalovaný skript „awk“? Používam Debian 7.2.
        Po druhé, neviem, čo mám robiť s vloženým kódom. Musím chytiť textový editor a uložiť ho do súboru s názvom „bandwidth-controller.sh“ a potom ho spustiť ako „./band-width-control.sh“. Toto je časť, kde som najviac stratený.
        Po tretie: Keď hovoríte, že ho chcete spustiť ako root, je potrebné zmeniť používateľa na root alebo to stačí na sudo?

        Ak máte nejaké odporúčanie týkajúce sa tejto témy, oceňujem to.
        Zdravím!

  5.   giskard dijo

    Preto vždy odinštalujem Transmission a nainštalujem Deluge. No, za to a ešte trochu viac vecí, ktoré mi Deluge ponúka, ktoré ten druhý neprináša.

    1.    Joaquin dijo

      Ahoj, nepoznám Deluge. Môj hlavný problém je internetová služba. Týmto to stlačím naplno.

  6.   panda dijo

    Ahoj. moja šírka pásma je tiež obmedzená, takže som vyskúšal tento skript. Ale nefunguje to. zdá sa, že chyba je v príkaze nethogs -t. vráti chybu „Čaká sa na dorazenie prvého paketu (pozri chybu sourceforge.net 1019381)“ a vyskúšal som mincovňu, archlinux a nič. Čo má ten príkaz vrátiť? Predpokladám, že by som mal vytlačiť v obyčajnom texte šírku pásma použitú každou aplikáciou. Poznáte iný program, ktorý vám umožňuje počúvať sieť?

    1.    Joaquin dijo

      Ahoj ako sa máš.
      To je chyba Nethogs. Zdá sa mi to tiež, ale aj tak to funguje.

      To, čo Nethogs robí, je zobrazovať procesy, ktoré spotrebúvajú najväčšiu šírku pásma, v reálnom čase. V skripte sa jeho výstup ukladá do textového súboru „net.list“, aby ho bolo možné neskôr filtrovať.

      Skript funguje iba v prípade Transmission (klient BitTorrent) a Firefox (webový prehliadač). To, čo robí, je obmedzenie šírky pásma prenosu, keď Firefox načítava webovú stránku. Musíte si nainštalovať: Nethogs, Transmission, Transmission-remote a Firefox.

      Všetko je to vysvetlené v príspevku, takže neviem, aký máš problém.

      PS: Prosím píšte správne a vylepšite svoj pravopis. Je to komentár, nie textová správa.

      1.    panda dijo

        scenár mi nefunguje. vypíše túto chybovú správu mnohokrát. spustite "nethogs -t" v termináli, aby ste videli, čo robí, ale nevytlačí nič, iba chybu. na mojom pc to nefunguje. Predstavujem si, že by malo tlačiť niečo podobné ako to, čo tlačí, keď je spustené bez -t, čo ukazuje procesy a šírku pásma. ale v mojom prípade to nič z toho nevytlačí. aké distro ste použili na vývoj scenára?

        1.    Joaquin dijo

          Ak sa pozriete pozorne, príspevok obsahuje všetok použitý softvér a jeho verzie. Neviem, prečo k chybe došlo, ale objavuje sa tiež vždy, keď je spustené „nethogs -t“. V skripte sa to stane každé 2 ″.

          Môže sa stať, že keď spustíte nethogs, neexistuje žiadny proces využívajúci sieť, a preto nezískate žiadny výstup.

          Skript musí byť spustený ako root, pretože nethogs potrebuje, aby tento užívateľ fungoval.

          teraz som si spomenul na niečo dôležité a viem, prečo to u vás nefunguje:

          MUSÍTE UPRAVIŤ skript a zmeniť meno bežného používateľa. V scenári sa to volá „joaquin“. Musíte si ho zmeniť na svoje užívateľské meno.

          Prepáčte, neuvedomil som si to, mal som dať meno do premennej. Ide o to, že ma nenapadlo, aby to bolo také všeobecné, iba som vám to chcel ukázať, aby ste to videli a tí, ktorí chcú, mohli získať nápady, ako to urobiť. Nerobil som to so zámerom, že by to fungovalo na akomkoľvek počítači, čo si vyžaduje čas a neviem programovať, niektoré veci sa mi stanú.

          Veľa šťastia, všetko sa opýtajte znova. A znovu si prečítajte príspevok a komentáre k scenáru.

  7.   facundo dijo

    Ahoj Joaquín, povedz mi toto:

    diaľkový prenos: (http://localhost:9091/transmission/rpc/) Nepodarilo sa pripojiť k serveru
    Aplikácia ioctl zlyhala pri vytváraní miestnej adresy IP pre vybrané zariadenie eth0. Zariadenie môžete určiť na príkazovom riadku.

    nejaké nápady?? Vďaka!

    1.    Joaquin dijo

      Ahoj ako sa máš.
      Prepáčte, ale netuším 😀
      Z toho, čo chápem, hovorí chyba, že ide o problém s ioctl, ale neviem, čo to je.

      Možno by ste mohli skúsiť zastaviť skript a zistiť, či prenos-vzdialená pracuje s niektorými z jej možností (prečítajte si jej manuálovú stránku pomocou príkazu „man“).