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í !!
Ach! Zajímavé 😀
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.
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.
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í!
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í.
Děkuji vám!
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ě 😉
Díky za barvy. Nejsem v tom moc dobrý, zdá se mi to velmi dlouhé a monotónní s tolika textem.
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
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“.
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í.
Díky za tip. Jakmile mám čas, zkusím to!
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 !!
Díky tobě! Doufám, že vám to může pomoci!
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!
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áší.
Ahoj, neznám Deluge. Mým hlavním problémem je internetová služba. Tím to naplno stlačím.
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íť?
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.
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?
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.
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!
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").