Script Bash: Az átvitel sávszélességének automatikus vezérlése

Üdv mindenkinek. Ez a második bejegyzésem. Általában nem írok bejegyzéseket, hacsak nincs valami jó megosztásom, és ezúttal van valami, ami biztosan sokakat érdekelni fog.

Néhány hónappal ezelőtt arra gondoltam, hogy készítek egy szkriptet az alkalmazások sávszélességének korlátozására, de voltak olyan problémáim és hibáim, amelyek megnehezítették számomra, ezért felvetettem kétségeim a fórum de <º DesdeLinux hátha valakinek lenne ötlete.

Így hagytam egy darabig, és egy nap úgy döntöttem, hogy folytatom a forgatókönyvet. Sokat teszteltem, sokat olvastam a bashról, és szabadidőmben fájtak a fejem, de megcsináltam !!

Óriási elégedettséggel rendelkezem, ezért úgy döntöttem, hogy megosztom veletek a kis forgatókönyvet, hogy használhassátok és fejleszthessétek. Tervezem a GPLv3 licencszerződését, de ez az első projektem, így nem vagyok egészen biztos abban, hogyan kell ezt megtenni (tanácsra van szükségem attól, aki korábban megtette).

Nos, most elmagyarázom, mi volt a szükségem és mit tettem a probléma megoldása érdekében.

Helyzet
512 KB-os internetes tervem van, ezért használom Átvitel mint BitTorrent kliens nagy fájlok (például LibreOffice és néhány GNU / Linux disztribúció) letöltésére. Ennél a sebességnél a letöltések sokáig tartanak, és a probléma a webböngésző használatakor van Firefox: sokáig tart betölteni.

Amikor csatlakozom az internethez, aktiválom az adatátviteli feltöltési és letöltési időkorlátokat, és megvárom, amíg a Firefox betöltődik, majd újra elindítom a torrenteket. Amint látni fogod, párszor ezt megunni unalmas. Arról nem is beszélve, hogy néha egyenesen szüneteltetem az összes torrentet, majd elfelejtem újra aktiválni őket, ami értékes időt pazarol a torrentek feltöltésére / letöltésére.

Megoldás
Erre a problémára úgy döntöttem, hogy létrehozok egy Bash szkriptet, amely alapvetően a következőket teszi:

1. Ellenőrizze, hogy az átvitel fut-e, és nincs-e szüneteltetve a torrent. Ha igen, kapcsolja vissza a torrenteket.

2. Ellenőrizze, hogy a Firefox fut-e. Ezután megkapja az általa küldött és fogadott KB / s fájlokat, és fájlba menti őket.

3. Ha a böngésző feltöltési / letöltési KB / s-ja meghaladja a referencia tartományt, akkor az Átviteli feltöltési / letöltési beállítások megváltoznak.

Ez lehetővé teszi, hogy amikor egy weblapra szeretne belépni, amikor a böngésző elküldi a kérést, az átviteli fájl feltöltése korlátozott, és amikor az oldal adatai beérkeznek, a letöltés korlátozott. Ez nagyszerűen működik, ha egyszerre több oldalt ér el, és az eredmények valóban megegyeznek a letiltott átvitellel.

Nagy előnye, hogy teljesen automatikus, és nem igényli a beavatkozásomat.

A script
Bár felhasználható bármely alkalmazás sávszélesség-fogyasztásának szabályozására, jelenleg csak egy nagyon speciális probléma megoldására íródott. De nem túl nehéz módosításokat végrehajtani.

Követelmények
A megfelelő működéshez szükséges az alkalmazás «nethogs".

Ebben az esetben, mivel a szkript a Firefox és a Transmission programmal együtt működik, szükség van ezeknek az alkalmazásoknak a telepítésére, a "transmission-remote" mellett, ami megváltoztatja a torrentek feltöltési és letöltési értékeit. Az "awk" szkriptben is használom. Azért említem, mert nem tudom, hogy az összes disztró telepítve van-e.

A használt szoftver
A parancsfájl által használt alkalmazások és a rendszer működési listája.

• Debian GNU / Linux 6.0.8
• Linux 2.6.32-5-686
• Firefox 24.0
• Sebességváltó 2.03 (11030)
• Nethogs 0.7.0

Végrehajtás
Gyökérként kell futtatni, mert nethogs csak azzal a felhasználóval futtatható, de átvitel-távoli a parancs segítségével a normál felhasználóval hajtják végre su.

A szkript a belső Bash parancsot használja csapda Amellyel vissza lehet állítani az alapértelmezett átviteli feltöltési / letöltési értékeket, amikor azt a SIGINT (CTRL + c) vagy SIGTERM jelekkel leállítják.

Még mindig nem tudom, hogyan kell futtatni indításkor és leállni, amikor leállítom vagy újraindítom a számítógépet. Arra gondoltam, hogy linket tegyek a fájlba /etc/rc.local de nem tudom, hogy működne-e, és nem igazán értem az / etc / működésétinit.d (Még néhány forgatókönyvet is láttam csontváz, de nem értem őket). Ha valaki tud nekem segíteni, akkor nagyon hálás leszek.

Hát emberek, ennyi. Remélem, hogy kis hozzájárulásom hasznos lesz számodra, és ha akarod, javíthatsz rajta. Örömmel olvasom el véleményét és ajánlásait, valamint javaslatait arra az esetre, ha biztonsági problémák merülnének fel a fájlban (nem vagyok programozó, időnként csak néhány dolgot végzek).

Tudom, hogy néhány javítással a jövőben nagyszerű alkalmazássá válhat, mert nem ismerek egyetlen programot sem, amely ugyanezt tenné. Például felmerül bennem, hogy grafikus felületem lehet zenitás és hogy megválaszthassuk azokat az alkalmazásokat, amelyeket a sávszélesség (webböngésző, frissítéskezelő, fájlátvitel stb.) és a különböző referenciaértékek használatában prioritásként kezelni szeretnénk. Igen, kissé ambiciózus, de nagyon hasznos.

A szkriptet a tészta. Nagyon köszönöm, hogy elolvastad !!


Hagyja megjegyzését

E-mail címed nem kerül nyilvánosságra. Kötelező mezők vannak jelölve *

*

*

  1. Az adatokért felelős: Miguel Ángel Gatón
  2. Az adatok célja: A SPAM ellenőrzése, a megjegyzések kezelése.
  3. Legitimáció: Az Ön beleegyezése
  4. Az adatok közlése: Az adatokat csak jogi kötelezettség alapján továbbítjuk harmadik felekkel.
  5. Adattárolás: Az Occentus Networks (EU) által üzemeltetett adatbázis
  6. Jogok: Bármikor korlátozhatja, helyreállíthatja és törölheti adatait.

  1.   élénk dijo

    Oh! Érdekes 😀

    1.    eliotime3000 dijo

      A bal alsó sarokban lehetősége van korlátozni a sávszélességet, amelyet az átvitel a feltöltés és a letöltés során egyaránt elfogyaszt. Az Átvitellel semmi problémám nem volt.

      1.    aprósütemény dijo

        De ez automatikus, és van grafikus felület nélküli átvitel is, így előfordulhat, hogy ez a funkció nem olyan praktikus.

      2.    Joaquin dijo

        Helló, hogy vagy.
        Igen, ezt már tudom. De pontosan ezt nem akarom megtenni.
        Nagyon rossz internetes tervem van (512 KB és ez a legjobb a környéken).

        A forgatókönyvemmel nem aggódom, hogy mindent kézzel csináljak. Képzelje el, hogy megnyit egy oldalt a böngészőben, és az Átvitel abban a pillanatban elfoglalja az összes sávszélességet, ezért az oldal betöltése eltart egy ideig (legfeljebb 1 ′, de kiborító). Elegem van abból, hogy két percenként "aktiválom az időkorlátokat". Ez automatikus és szinte azonnali (5 másodpercenként ellenőrzi a Firefox által küldött és fogadott KB-t).

        Tényleg az én esetemben azzal az internetes sebességgel, kiváló. Szintén nem ismerek más alkalmazást, amely ezt megtenné, különben nem tette volna meg. Akiket láttam, csak korlátozzák a sávszélességet, de nem automatikusan.

        Remélem érthető voltam. Köszönöm, hogy elolvasta!

        1.    Joaquin dijo

          Bocsánat, tévedtem. Nem 512 KB-os, inkább Kbit-ek. (Vagyis 1/2 "Mega"). A maximálisan letölthető 75KB / s és 50KB / s feltöltés. Ha az internet rendben van, különben a normális 48 és 23.

    2.    Joaquin dijo

      Köszönöm!

  2.   aprósütemény dijo

    Érdekes, hogy a qBittorrent-t használom, és a kapcsolót használom korlátokhoz.

    A bejegyzés szépen néz ki ezekkel a színekkel 😉

    1.    Joaquin dijo

      Köszönöm a színeket. Nem vagyok túl jó ebben, nagyon hosszúnak és monotonnak tűnik ennyi szöveggel.

  3.   Jorge dijo

    Személy szerint az átviteli démonot és a Firefoxot egy élő alkalmazás füllel használom, így nem járok külső programokkal, vagy elfelejtettem folytatni a torrenteket vagy az aktivált teknősöt (és a telefonomról is irányíthatom). A szolgáltatás indításához egy felhasználó hozzáadódik (pl: adduser –disabled-password nethogs), az /etc/init.d fájlban létrehozzák a démon szövegfájlját névvel (pl .: nethogs-daemon), majd a debianban írja be az "update-rc.d nethogs-daemon defaults" parancsot, hogy magától induljon.

    A szöveges fájl szintén egy bash szkript, amelybe beolvashatja a szkriptet.
    Nézze meg, hogy ez tud-e segíteni Önnek, használható-e az átviteli-démon elindítására, és használható-e a nethogok indítására https://trac.transmissionbt.com/wiki/Scripts/initd

    1.    Joaquin dijo

      Hello!
      Lássuk, értem-e: ez az indítás indítása indításkor, és leállítás vagy újraindításkor le kell állítani. Ezzel nincsenek gondjaim, mivel mindig magától indul, és elkezd letölteni (az Xfce indításakor hozzáadtam az alkalmazásokhoz).

      A problémám az, hogy ha a szkriptet rc.local vagy init.d fájlba teszem, akkor nem tudom, hogy a számítógép hogyan állítja le a szkriptet. Vagyis nyilván a PC leállításakor / újraindításakor az összes folyamat leáll (és velük együtt a Transmission és a Nethogs is), de nem tudom, mi történne a szkriptemmel.

      És miért zavar ez engem? A szkript létrehoz egy fájlt a / tmp fájlban, és szabályozza az átvitel sebességét. Ha egy terminálban futtatom, és hirtelen leállítom (például a CTRL + c billentyűkombinációval), akkor a szkript bezárás előtt visszaállítja az alapértelmezett sebességet (ha szükséges), majd leállítja a Nethogs alkalmazást, és törli a fájlt a / tmp fájlból. Igyekeztem minél "professzionálisabbá" tenni, hogy ne maradjon laza fájl vagy háttérfolyamat.

      Arról, amit mondott, nem értettem, mi az az „élő alkalmazás fül”.

      1.    Jorge dijo

        Az alkalmazás fül állandó fül, a Firefoxon belül mindig nyitott és minimalizált http://i.imgur.com/a5i0aP3.png (a fülön a helyi menü, kattintson a "fül beillesztése" gombra). Amikor a démonok TERM jelet küldenek, várnak egy darabig, amíg kijelentkeznek, és elmentik adataikat. Figyelje meg, hogy abban a linkben, amelyet korábban adtam, amikor kiléptem a szkriptből, a start-stop-démon hívja meg az utasítást, hogy állítsa le az átvitelt, ott beillesztheti a "killall nethogokat" és azt, hogy mit tartalmaz a StopScript. Ebben az esetben az init szkriptet rootnak kell hívnia egy adott felhasználó helyett, mivel privilégiumokra van szüksége.

        1.    Joaquin dijo

          Nos, köszönöm a tippet. Amint lesz időm, megpróbálom!

  4.   Facundo dijo

    nagyszerű, találkoztam ezzel a kellemetlenséggel, mivel még akkor is, ha gyors a kapcsolata, kénytelen korlátozni az adást, miközben böngészni szeretne, és így "pazarolja" az idejét.
    Kipróbálom, amikor csak lehet. Üdvözlet és köszönet !!

    1.    Joaquin dijo

      Neked köszönhetően! Remélem, ez segíthet!

      1.    facundo dijo

        Helló még egyszer Joaquin. Úgy látom, hogy Ön gondoskodik az összes megjegyzés megválaszolásáról, ezért ezt ki fogom használni, és felteszek néhány újonnan feltett kérdést.
        Először is, honnan tudom, hogy telepítve van-e az "awk" szkript? A Debian 7.2-et használom.
        Másodszor, nem tudom, mit kezdjek a beillesztési kóddal. Meg kell ragadnom egy szövegszerkesztőt, és el kell mentenem a "bandwidth-controller.sh" nevű fájlba, majd "./band-width-control.sh" néven kell futtatnom. Ez az a rész, ahol leginkább eltévedtem.
        Harmadik: Ha azt mondod, hogy rootként futtasd, akkor szükség van-e felhasználóról root-ra váltásra, vagy elég ez a sudo-val?

        Ha van valami olvasnivalója, amely ajánlana nekem a témában, nagyra értékelem.
        Üdvözlet!

  5.   giskard dijo

    Ezért mindig eltávolítom a Transmission szoftvert és a Deluge-t. Nos, ehhez és még egy kis dologhoz, amelyet a Deluge kínál nekem, amit a másik nem hoz.

    1.    Joaquin dijo

      Szia, nem ismerem az özönvizet. A fő problémám az internetes szolgáltatás. Ezzel maximálisan összenyomom.

  6.   panda dijo

    Szia. a sávszélességem is korlátozott, ezért kipróbáltam ezt a szkriptet. De nem működik. úgy tűnik, hogy a hiba a nethogs -t parancsban van. visszaadja az "Várakozás az első csomag megérkezésére (lásd: sourceforge.net bug 1019381)" hibát, és kipróbáltam a mentát, az archlinuxot és semmit. Mit kell ennek a parancsnak visszaadnia? Feltételezem, hogy sima szöveggel kell kinyomtatnom az egyes alkalmazások által használt sávszélességet. Ismer egy másik programot, amely lehetővé teszi a hálózat meghallgatását?

    1.    Joaquin dijo

      Helló, hogy vagy.
      Ez egy Nethogs hiba. Nekem is megjelenik, de mindenképp működik.

      A Nethogs azt mutatja, hogy a legtöbb sávszélességet felemésztő folyamatok valós időben kerülnek bemutatásra. A szkript kimenetét a "net.list" szövegfájlba menti, hogy később szűrhető legyen.

      A szkript csak a Transmission (egy BitTorrent kliens) és a Firefox (web böngésző) esetén működik. Amit tesz, az korlátozza a Transmission sávszélességét, amikor a Firefox egy weboldalt tölt be. Telepítenie kell: Nethogs, Transmission, Transmission-remote és Firefox.

      Mindezt a bejegyzés magyarázza, ezért nem tudom, mi a problémád.

      PS: Kérjük, írjon helyesen, és javítsa a helyesírást. Ez egy megjegyzés, nem szöveges üzenet.

      1.    panda dijo

        a forgatókönyv nem működik nálam. sokszor kinyomtatja azt a hibaüzenetet. futtassa a "nethogs -t" -t egy terminálon, hogy lássa, mit csinál, de nem nyomtat semmit, csak a hibát. az én pc-n nem működik. Úgy képzelem, hogy valami hasonlót kell kinyomtatnia ahhoz, mint amit kinyomtat, ha a -t nélkül fut, bemutatva a folyamatokat és a sávszélességet. de az én esetemben nem nyomtat ilyet. melyik diszkót használta a szkript fejlesztéséhez?

        1.    Joaquin dijo

          Ha jól megnézed, a bejegyzés tartalmazza az összes használt szoftvert és annak verzióit. Nem tudom, miért a hiba, de nekem minden alkalommal megjelenik, amikor a "nethogs -t" fut. A szkriptben ez 2 ″ -kor fog megtörténni.

          Előfordulhat, hogy a nethogs futtatásakor nincs folyamat a hálózat használatával, és ezért nem kap semmilyen kimenetet.

          A szkriptet rootként kell futtatni, mert a nethogoknak szüksége van a felhasználó működésére.

          most eszembe jutott valami fontos, és tudom, miért nem működik ez neked:

          SZERKESZTENI kell a szkriptet, és módosítania kell a normál felhasználó nevét. A szkriptben "joaquin" -nak hívják. Meg kell változtatnia a felhasználónévre.

          Sajnálom, hogy ezt nem vettem észre, egy változóba kellett volna tennem a nevet. Az a helyzet, hogy nem gondoltam ilyen általánosra, csak meg akartam mutatni nektek, hogy lássátok, és a vágyók ötleteket kaphatnának arról, hogyan kell csinálni. Nem azzal a szándékkal tettem, hogy bármely számítógépen működni fog, ez időbe telik, és nem tudom, hogyan kell programozni, néhány dolog velem történik.

          Sok szerencsét, bármit kérjen újra. És kérjük, olvassa el újra a szkript bejegyzését és megjegyzéseit.

  7.   facundo dijo

    Helló Joaquín, mondd el nekem a következőket:

    távirányító: (http://localhost:9091/transmission/rpc/) Nem sikerült csatlakozni a szerverhez
    Az ioctl meghiúsult, miközben létrehozta a helyi IP-t a kiválasztott eth0 eszközhöz. Az eszközt megadhatja a parancssorban.

    bármilyen ötletet?? köszönöm!

    1.    Joaquin dijo

      Helló, hogy vagy.
      Elnézést, de fogalmam sincs 😀
      Amiből megértem a hibát, az az ioctl problémája, de nem tudom, mi ez.

      Esetleg megpróbálhatná leállítani a szkriptet, és megnézni, hogy a remote-remote működik-e néhány opcióval (olvassa el a man oldalt a "man" paranccsal).