Script Bash: Automaticky ovládejte šířku pásma přenosu

Ahoj všichni. Toto je můj druhý příspěvek. Obvykle nepíšu příspěvky, pokud nemám něco dobrého ke sdílení a tentokrát mám něco, o co jistě mnoho lidí bude mít zájem.

Před několika měsíci jsem přemýšlel o vytvoření skriptu, který by omezil šířku pásma aplikací, ale měl jsem nějaké problémy a chyby, které mi to znesnadňovaly, a tak jsem v Foro de <º DesdeLinux pro případ, že by někdo měl nápad.

Na chvíli jsem to tedy nechal a jednoho dne jsem se rozhodl pokračovat ve scénáři. Hodně jsem testoval, četl jsem hodně o bash a ve volném čase jsem měl bolesti hlavy, ale udělal jsem to !!

Mám obrovskou spokojenost, a proto jsem se rozhodl s vámi sdílet můj malý scénář, abyste jej mohli používat a vylepšovat. Mám v plánu ji licencovat pod GPLv3, ale je to můj první projekt, takže si nejsem úplně jistý, jak to udělat (potřebuji radu od toho, kdo to udělal dříve).

Nyní vysvětlím, co jsem potřeboval a co jsem udělal pro vyřešení problému.

situación
Mám internetový plán 512 kB, proto používám Přenos jako klient BitTorrent ke stahování velkých souborů (jako je LibreOffice a některá distribuce GNU / Linux). S touto rychlostí stahování trvá dlouho a problém je při používání webového prohlížeče Firefox: načítání trvá dlouho.

Když se připojím k internetu, aktivuji časové limity přenosu a stahování přenosu a počkám na načtení Firefoxu, poté znovu spustím torrenty. Jak uvidíte, dělat to několikrát je zdlouhavé. Nemluvě o tom, že někdy úplně pozastavím všechny torrenty a pak je zapomenu znovu zapnout, což vede ke ztrátě cenného času pro nahrávání / stahování torrentů.

Řešení
Pro tento problém jsem se rozhodl vytvořit skript v Bash, který v podstatě dělá následující:

1. Zkontrolujte, zda je spuštěn přenos a není pozastaven žádný torrent. Pokud ano, torrenty znovu zapněte.

2. Ověřte, zda je Firefox spuštěn. Poté získá KB a odeslané a přijaté soubory a uloží je do souboru.

3. Pokud prohlížeč načte nebo stáhne soubory KB / s přesahuje referenční rozsah, změní se nastavení přenosu / načtení přenosu.

To umožňuje, že když chcete získat přístup na webovou stránku, když prohlížeč odešle požadavek, je přenos souboru přenosu omezen a když jsou přijata data stránky, stahování je omezeno. To funguje skvěle při přístupu na více stránek najednou a výsledky jsou ve skutečnosti stejné jako při zakázaném přenosu.

Velkou výhodou je, že je plně automatický a nevyžaduje můj zásah.

Scénář
Ačkoli by to mohlo být použito k řízení spotřeby šířky pásma jakékoli aplikace, v tuto chvíli je napsáno pouze k vyřešení velmi konkrétního problému. Není však příliš obtížné provádět úpravy.

Požadavky
Pro správné fungování je nutné mít aplikaci «nethogové".

V tomto případě, protože skript pracuje s Firefoxem a Transmisí, je nutné mít nainstalované tyto aplikace, kromě „přenosu-vzdáleného“, což mění hodnoty uploadu a downloadu torrentů. Také používám ve skriptu "awk". Zmínil jsem se o tom, protože nevím, jestli je nainstalována ve všech distribucích.

Použitý software
Seznam aplikací, které skript používá, a systém, ve kterém funguje.

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

Provedení
Musí být spuštěn jako root, protože nethogové lze spustit pouze s tímto uživatelem, ale dálkový přenos provádí se u běžného uživatele pomocí příkazu su.

Skript používá interní příkaz Bash past Pomocí kterého je možné obnovit výchozí hodnoty odesílání / stahování přenosu, když je zastaven pomocí signálů SIGINT (CTRL + c) nebo SIGTERM.

Stále si nejste jisti, jak to spustit při spuštění a zastavit, když vypnu nebo restartuji počítač. Přemýšlel jsem o vložení odkazu do souboru /etc/rc.local ale nevím, jestli by to fungovalo, a nechápu, jak / etc / fungujeinit.d (Viděl jsem nějaké skripty, které tam jsou, dokonce kostra, ale nerozumím jim). Pokud mi někdo může pomoci, budu velmi vděčný.

Lidi, to je ono. Doufám, že můj malý příspěvek je pro vás užitečný a že jej můžete podle potřeby vylepšit. Rád si přečtu vaše názory a doporučení i návrhy v případě bezpečnostních problémů se souborem (nejsem programátor, občas udělám jen pár věcí).

Vím, že s některými opravami se to může v budoucnu stát skvělou aplikací, protože nevím o žádném programu, který by dělal totéž. Například mě napadne, že bych mohl mít grafické rozhraní v zenita a možnost vybrat si aplikace, které chceme upřednostnit při používání šířky pásma (webový prohlížeč, správce aktualizací, přenos souborů atd.) a různé referenční hodnoty. Ano, je to poněkud ambiciózní, ale docela užitečné.

Skript si můžete stáhnout v pasta. Moc děkuji za přečtení !!


Zanechte svůj komentář

Vaše e-mailová adresa nebude zveřejněna. Povinné položky jsou označeny *

*

*

  1. Odpovědný za údaje: Miguel Ángel Gatón
  2. Účel údajů: Ovládací SPAM, správa komentářů.
  3. Legitimace: Váš souhlas
  4. Sdělování údajů: Údaje nebudou sděleny třetím osobám, s výjimkou zákonných povinností.
  5. Úložiště dat: Databáze hostovaná společností Occentus Networks (EU)
  6. Práva: Vaše údaje můžete kdykoli omezit, obnovit a odstranit.

  1.   živý řekl

    Ach! Zajímavé 😀

    1.    eliotime3000 řekl

      V levém dolním rohu máte možnost omezit šířku pásma, kterou Transmission spotřebovává při nahrávání i stahování. S převodovkou jsem s tím neměl žádný problém.

      1.    sušenka řekl

        Ale je to automatické a je zde také přenos bez grafického rozhraní, takže tuto funkci nemusíte mít tak po ruce.

      2.    Joaquin řekl

        Ahoj, jak se máš.
        Ano, už to vím. Ale to je přesně to, co nechci dělat.
        Mám velmi špatný internetový plán (512 kB a je to nejlepší v mé oblasti).

        S mým scénářem si nedělám starosti, že budu všechno dělat ručně. Představte si, že otevřete stránku v prohlížeči a přenos v daném okamžiku zabírá veškerou šířku pásma, takže načítání stránky trvá chvíli (maximálně 1 ′, ale je to podrážděné). Už mě unavuje „aktivace časových limitů“ každé dvě minuty. To je automatické a téměř okamžité (každých 5 sekund kontroluje KB odesílané a přijímané Firefoxem).

        Opravdu v mém případě s touto rychlostí internetu je to vynikající. Také nevím o jiné aplikaci, která to dělá, jinak by to neudělala. Ty, které jsem viděl, omezují pouze šířku pásma, ale ne automaticky.

        Doufám, že jsem měl jasno. Děkuji za přečtení!

        1.    Joaquin řekl

          Promiň, mýlil jsem se. Nejsou 512 kB, jsou to spíše kbity. (To znamená 1/2 „Mega“). Maximum, které mohu stáhnout, je 75 kB / s a ​​nahrávání 50 kB / s. To je, když je internet v pořádku, jinak je 48 a 23 normální.

    2.    Joaquin řekl

      Děkuji vám!

  2.   sušenka řekl

    Zajímavé je, že používám qBittorrent a používám přepínač limitů.

    S těmi barvami vypadá příspěvek pěkně 😉

    1.    Joaquin řekl

      Díky za barvy. Nejsem v tom moc dobrý, zdá se mi to velmi dlouhé a monotónní s tolika textem.

  3.   Jorge řekl

    Osobně používám přenos-démona a firefox s živou kartou aplikace, takže neobcházím externí programy ani nezapomenu pokračovat v torrentech nebo aktivované želvě (a můžu to ovládat z telefonu). Chcete-li spustit službu, přidejte uživatele (např. Adduser –disabled-password nethogs), vytvořte textový soubor pro démona v /etc/init.d se jménem (např .: nethogs-daemon) a poté v debian zadejte „update-rc.d nethogs-daemon defaults“, aby se spouštěl sám.

    Textový soubor je také bash skript, do kterého můžete skript sloučit.
    Podívejte se, jestli vám to může pomoci, může být použito ke spuštění přenosového démona, může být použito ke spuštění nethogů https://trac.transmissionbt.com/wiki/Scripts/initd

    1.    Joaquin řekl

      Dobrý den!
      Podívejme se, jestli rozumím: toto má spustit přenos při spuštění a zastavit jej při vypnutí nebo restartu. S tím nemám žádné problémy, protože to vždy začíná samo a začne se stahovat (přidal jsem to do aplikací při spuštění v Xfce).

      Můj problém je, že když vložím skript do rc.local nebo do init.d, nevím, jak počítač skript zastaví. To znamená, že samozřejmě při vypnutí / restartu PC jsou všechny procesy ukončeny (a s nimi i Transmission a Nethogs), ale nevím, co by se stalo s mým skriptem.

      A proč mi to vadí? Skript vytvoří soubor v / tmp a řídí rychlost přenosu. Pokud jej spustím v terminálu a najednou ho zastavím (například pomocí CTRL + c), skript před zavřením obnoví výchozí rychlosti (je-li to nutné) a poté zastaví Nethogs a odstraní soubor z / tmp. Snažil jsem se, aby to bylo co nejprofesionálnější, aby nezanechalo žádné volné soubory nebo procesy na pozadí.

      O tom, co jste řekl, jsem nepochopil, co je to „živá karta aplikace“.

      1.    Jorge řekl

        Karta aplikace je trvalá karta, která je vždy otevřená a minimalizovaná ve Firefoxu http://i.imgur.com/a5i0aP3.png (kontextové menu na kartě, klikněte na «vložit kartu»). Když démoni pošlou TERM signál, chvíli počkají, než uzavřou relaci, a uloží svá data. Všimněte si, že do odkazu, který jsem dal dříve při ukončení skriptu, volá start-stop-daemon a řekne přenosu, aby se zastavil, tam můžete vložit „killall nethogs“ a co obsahuje StopScript. Inicializační skript v tomto případě budete muset nazvat jako root namísto konkrétního uživatele, protože potřebuje oprávnění.

        1.    Joaquin řekl

          Díky za tip. Jakmile mám čas, zkusím to!

  4.   Facundo řekl

    skvěle, narazil jsem na tuto nevýhodu, protože i když máte rychlé připojení, jste nuceni omezit přenos, když chcete procházet, a tak „ztrácet čas“.
    Pokusím se to zkusit. Zdravím a děkuji !!

    1.    Joaquin řekl

      Díky tobě! Doufám, že vám to může pomoci!

      1.    Facundo řekl

        Ahoj znovu Joaquine. Vidím, že se staráte o reakci na všechny komentáře, takže toho využiji a zeptám se vás na pár nováčkovských otázek.
        Nejprve, jak zjistím, zda mám nainstalovaný skript „awk“? Používám Debian 7.2.
        Zadruhé, nevím, co dělat s kódem pro vložení. Musím popadnout textový editor a uložit jej do souboru s názvem „bandwidth-controller.sh“ a poté jej spustit jako „./band-width-controller.sh“. To je část, kde jsem nejvíce ztracen.
        Za třetí: Když říkáte, že jej chcete spustit jako root, je nutné změnit uživatele na root nebo pomocí sudo, že?

        Pokud máte nějaké doporučení, které by mě na toto téma doporučilo, oceňuji to.
        Zdravím!

  5.   giskard řekl

    Proto vždy odinstaluji Transmission a nainstaluji Deluge. No, k tomu a ještě trochu více věcí, které mi Deluge nabízí, které ten druhý nepřináší.

    1.    Joaquin řekl

      Ahoj, neznám Deluge. Mým hlavním problémem je internetová služba. Tím to naplno stlačím.

  6.   panda řekl

    Ahoj. moje šířka pásma je také omezená, takže jsem zkusil tento skript. Ale nefunguje to. Zdá se, že chyba je v příkazu nethogs -t. vrátí chybu „Čekání na příchod prvního paketu (viz chyba sourceforge.net 1019381)“ již vyzkoušeli mincovnu, archlinux a nic. Co má ten příkaz vrátit? Předpokládám, že bych měl tisknout v prostém textu šířku pásma používanou každou aplikací. Znáte jiný program, který vám umožní poslouchat síť?

    1.    Joaquin řekl

      Ahoj, jak se máš.
      To je chyba Nethogs. Zdá se mi to také, ale stejně to funguje.

      To, co Nethogs dělá, je ukázat procesy, které spotřebovávají největší šířku pásma, v reálném čase. Ve skriptu je jeho výstup uložen v textovém souboru „net.list“, aby jej bylo možné později filtrovat.

      Skript funguje pouze s Transmission (klient BitTorrent) a Firefox (webový prohlížeč). Co dělá, je omezení šířky pásma přenosu, když Firefox načítá webovou stránku. Musíte si nainstalovat: Nethogs, Transmission, Transmission-remote a Firefox.

      Vše je vysvětleno v příspěvku, takže nevím, v čem máte problém.

      PS: Napište prosím správně a vylepšete svůj pravopis. Je to komentář, ne textová zpráva.

      1.    panda řekl

        scénář nefunguje pro mě. tiskne tuto chybovou zprávu mnohokrát. spusťte "nethogs -t" v terminálu, abyste zjistili, co dělá, ale nevytiskne nic, jen chybu. na mém počítači to nefunguje. Představuji si, že by měl tisknout něco podobného tomu, co tiskne, když je provedeno bez -t, ukazující procesy a šířku pásma. ale v mém případě nic z toho nevytiskne. jakou distribuci jste použili k vývoji skriptu?

        1.    Joaquin řekl

          Pokud se podíváte pozorně, příspěvek obsahuje veškerý použitý software a jeho verze. Nevím, proč k chybě došlo, ale objeví se mi pokaždé, když je spuštěno "nethogs -t". Ve skriptu se to stane každé 2 ″.

          Může se stát, že při spuštění nethogů neexistuje žádný proces využívající síť, a proto nedostáváte žádný výstup.

          Skript musí být spuštěn jako root, protože nethogs potřebuje, aby tento uživatel fungoval.

          teď jsem si vzpomněl na něco důležitého a vím, proč to u vás nefunguje:

          MUSÍTE EDITOVAT skript a změnit jméno běžného uživatele. Ve skriptu se tomu říká „joaquin“. Musíte jej změnit na jméno svého uživatele.

          Omlouvám se, že jsem si to neuvědomil, měl jsem dát jméno do proměnné. Jde o to, že mě nenapadlo, aby to bylo tak obecné, jen jsem vám to chtěl ukázat, abyste to viděli, a kdo chce, mohl získat nápady, jak to udělat. Neudělal jsem to s úmyslem, že to bude fungovat na jakémkoli zařízení, což vyžaduje čas a nevím, jak programovat, některé věci se mi staly.

          Hodně štěstí. Přečtěte si prosím znovu příspěvek a komentáře skriptu.

  7.   Facundo řekl

    Ahoj Joaquíne, řekni mi následující:

    dálkový přenos: (http://localhost:9091/transmission/rpc/) Nelze se připojit k serveru
    ioctl selhalo při vytváření lokální IP pro vybrané zařízení eth0. Zařízení můžete určit na příkazovém řádku.

    nějaké nápady?? dík!

    1.    Joaquin řekl

      Ahoj, jak se máš.
      Promiňte, ale nemám tušení 😀
      Z toho, co chápu, že chyba říká, je to problém s ioctl, ale nevím, co to je.

      Možná byste mohli zkusit zastavit skript a zjistit, zda přenos-vzdálený pracuje s některými jeho možnostmi (přečtěte si jeho manuálovou stránku pomocí příkazu "man").