Script Bash: Ohjaa lähetyskaistanleveyttä automaattisesti

Hei kaikki. Tämä on toinen postini. En yleensä kirjoita viestejä, ellei minulla ole jotain hyvää jaettavaa, ja tällä kertaa minulla on jotain, josta varmasti monet ovat kiinnostuneita.

Muutama kuukausi sitten ajattelin tehdä komentosarjan sovellusten kaistanleveyden rajoittamiseksi, mutta minulla oli joitain ongelmia ja virheitä, jotka vaikeuttivat minua, joten herätin epäilyksiäni Foro de <º DesdeLinux jos jollakulla olisi idea.

Joten jätin sen hetkeksi ja eräänä päivänä päätin jatkaa käsikirjoitusta. Tein paljon testejä, luin paljon bashista ja minulla oli päänsärkyä vapaa-ajallaan, mutta tein sen!

Minulla on valtava tyytyväisyys, joten olen päättänyt jakaa pienen käsikirjoitukseni kanssasi, jotta voit käyttää sitä ja parantaa sitä. Aion lisensoida sen GPLv3: lla, mutta se on ensimmäinen projektini, joten en ole aivan varma, miten se tehdään (tarvitsen neuvoja keneltä tahansa, joka on tehnyt sen aiemmin).

No, selitän nyt, mikä oli tarpeeni ja mitä tein ongelman ratkaisemiseksi.

Tilanne
Minulla on 512 kt: n Internet-suunnitelma, joten käytän lähetys BitTorrent-asiakkaana ladata suuria tiedostoja (kuten LibreOffice ja jotkut GNU / Linux-distrot). Tällä nopeudella lataukset vievät kauan, ja ongelma on verkkoselaimen käytössä Firefox: lataaminen kestää kauan.

Kun muodostan yhteyden Internetiin, aktivoin lähetyksen lataus- ja latausajat ja odotan, että Firefox latautuu, ja käynnistän torrentit sitten uudelleen. Kuten näette, tämän tekeminen pari kertaa on ikävä. Puhumattakaan siitä, että joskus keskeytän suorastaan ​​kaikki torrentit ja unohdan käynnistää ne sitten uudelleen, mikä johtaa arvokkaaseen ajanhukkaan torrentien lataamiseen.

Ratkaisu
Tätä ongelmaa varten päätin luoda komentosarjan Bashiin, joka tekee periaatteessa seuraavat:

1. Tarkista, että lähetys on käynnissä ja ettei torrentia ole keskeytetty. Jos näin on, kytke torrentit takaisin päälle.

2. Varmista, että Firefox on käynnissä. Sitten se lähettää ja vastaanottaa KB / s ja tallentaa ne tiedostoon.

3. Jos selaimen lataus- / lataustietokanta / s ylittää viitealueen, lähetyslataus- / latausasetuksia muutetaan.

Tämä sallii, että kun halutaan käyttää verkkosivua, kun selain lähettää pyynnön, lähetystiedoston lataus on rajoitettua ja kun sivutiedot vastaanotetaan, lataus on rajoitettua. Tämä toimii hyvin, kun käytät useita sivuja kerralla, ja tulokset ovat samat kuin lähetys pois päältä.

Suuri etu on, että se on täysin automaattinen eikä vaadi minun puuttumistani.

Käsikirjoitus
Vaikka sitä voitaisiin käyttää minkä tahansa sovelluksen kaistanleveyden kulutuksen säätämiseen, tällä hetkellä se on kirjoitettu vain hyvin erityisen ongelman ratkaisemiseksi. Mutta ei ole kovin vaikeaa tehdä muutoksia.

Vaatimukset
Jotta se toimisi kunnolla, on oltava sovellus «nethogs'.

Tässä tapauksessa, koska komentosarja toimii Firefoxin ja Transmissionin kanssa, on välttämätöntä, että nämä sovellukset on asennettu "siirto-kauko-ohjaimen" lisäksi, mikä muuttaa torrentien lataus- ja latausarvoja. Käytän myös käsikirjoituksessa "awk". Mainitsen sen, koska en tiedä onko kaikkiin distroihin asennettu.

Käytetty ohjelmisto
Luettelo komentosarjan käyttämistä sovelluksista ja järjestelmästä, jossa se toimii.

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

Täytäntöönpano
Se on suoritettava pääkäyttäjänä, koska nethogs voidaan suorittaa vain kyseisen käyttäjän kanssa, mutta lähetys-kauko se suoritetaan normaalin käyttäjän kanssa komennon avulla su.

Komentosarja käyttää sisäistä Bash-komentoa ansa Millä on mahdollista palauttaa lähetyksen kuorman / kuorman oletusarvot, kun se pysäytetään SIGINT (CTRL + c) tai SIGTERM -signaaleilla.

Et vieläkään ole varma, miten se suoritetaan käynnistyksen yhteydessä ja pysäytetään, kun sammutan tai käynnistän tietokoneen uudelleen. Halusin laittaa linkin tiedostoon /etc/rc.local mutta en tiedä toimiiko se, enkä oikein ymmärrä miten / etc / toimiiinit.d (Näin joitain käsikirjoituksia, jotka ovat siellä, jopa luuranko, mutta en ymmärrä niitä). Jos joku voi auttaa minua, olen erittäin kiitollinen.

No ihmiset, siinä se. Toivon, että pieni panokseni on hyödyllinen sinulle ja että voit parantaa sitä, jos haluat. Luen mielelläni mielipiteesi ja suosituksesi sekä ehdotuksesi, jos tiedostossa on tietoturvaongelmia (en ole ohjelmoija, teen vain muutamia asioita aika ajoin).

Tiedän, että joillakin korjauksilla siitä voi tulla loistava sovellus tulevaisuudessa, koska en tiedä yhtään ohjelmaa, joka tekisi saman. Esimerkiksi tulee mieleeni, että minulla voisi olla graafinen käyttöliittymä zenity ja pystyä valitsemaan sovellukset, jotka haluamme priorisoida kaistanleveyden käytössä (verkkoselain, päivitysten hallinta, tiedostojen siirto jne.) ja erilaisissa viitearvoissa. Kyllä, se on jonkin verran kunnianhimoinen, mutta varsin hyödyllinen.

Voit ladata komentosarjan pasta. Kiitos lukemisesta!


Jätä kommentti

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *

*

*

  1. Vastuussa tiedoista: Miguel Ángel Gatón
  2. Tietojen tarkoitus: Roskapostin hallinta, kommenttien hallinta.
  3. Laillistaminen: Suostumuksesi
  4. Tietojen välittäminen: Tietoja ei luovuteta kolmansille osapuolille muutoin kuin lain nojalla.
  5. Tietojen varastointi: Occentus Networks (EU) isännöi tietokantaa
  6. Oikeudet: Voit milloin tahansa rajoittaa, palauttaa ja poistaa tietojasi.

  1.   vilkas dijo

    Vai niin! Mielenkiintoista 😀

    1.    eliotime3000 dijo

      Vasemmassa alakulmassa sinulla on mahdollisuus rajoittaa kaistanleveyttä, jota lähetys kuluttaa sekä lataamiseen että lataamiseen. Lähetyksessä minulla ei ole ollut mitään ongelmia sen kanssa.

      1.    pikkuleipä dijo

        Mutta tämä on automaattista, ja on myös lähetys ilman graafista käyttöliittymää, joten toimintoa ei ehkä ole niin lähellä.

      2.    Joaquin dijo

        Hei, kuinka voit.
        Kyllä, tiedän sen jo. Mutta juuri sitä en halua tehdä.
        Minulla on erittäin huono Internet-suunnitelma (512 kt ja se on paras alueellani).

        Käsikirjoitukseni kanssa en ole huolissani siitä, että teen kaiken käsin. Kuvittele, että avaat sivun selaimessa ja Lähetys vie koko kaistanleveyden sillä hetkellä, joten sivun lataaminen kestää jonkin aikaa (enintään 1 ′, mutta se on ärsyttävää). Olen valmis "aktivoimaan aikarajat" kahden minuutin välein. Tämä on automaattista ja melkein välitöntä (se tarkistaa Firefoxin lähettämän ja vastaanottaman KB: n 5 sekunnin välein).

        Oikeasti minun tapauksessani sillä Internet-nopeudella, se on erinomainen. En myöskään tiedä toista sovellusta, joka tekee tämän, muuten se ei olisi tehnyt sitä. Ne, jotka olen nähnyt, rajoittavat vain kaistanleveyttä, mutta eivät automaattisesti.

        Toivon, että olin selvä. Kiitos, että luit!

        1.    Joaquin dijo

          Anteeksi olin väärässä. Ne eivät ole 512 kt, vaan ne ovat Kbit. (Toisin sanoen 1/2 "megaa"). Enintään voi ladata 75 kt / s ja 50 kt / s. Silloin Internet on kunnossa, muuten normaali on 48 ja 23.

    2.    Joaquin dijo

      Kiitos!

  2.   pikkuleipä dijo

    Mielenkiintoista, käytän qBittorrentia ja käytän kytkintä rajoituksiin.

    Viesti näyttää hyvältä näiden värien kanssa 😉

    1.    Joaquin dijo

      Kiitos väreistä. En ole kovin hyvä siinä, se näyttää hyvin pitkältä ja yksitoikkoiselta niin paljon tekstiä.

  3.   Jorge dijo

    Henkilökohtaisesti käytän lähetys-demonia ja Firefoxia live-sovellusvälilehdellä, joten en kävele ulkoisten ohjelmien kanssa tai unohda jatkaa torrenteja tai aktivoitua kilpikonnaa (ja voin hallita sitä puhelimellani). Aloita palvelu lisäämällä käyttäjä (esim. Adduser –disabled-password nethogs), luomalla tekstitiedosto daemonille hakemistossa /etc/init.d nimellä (esim. Nethogs-daemon) ja kirjoittamalla sitten debianissa " update-rc.d nethogs-daemon oletusarvoisesti "niin, että se käynnistyy itsestään.

    Myös tekstitiedosto on bash-komentosarja, johon voit yhdistää komentosarjan.
    Katso, voiko tämä auttaa sinua, sitä voidaan käyttää lähetys-daemonin käynnistämiseen, sitä voidaan käyttää nethogien käynnistämiseen https://trac.transmissionbt.com/wiki/Scripts/initd

    1.    Joaquin dijo

      Hei!
      Katsotaanpa ymmärränkö: Lähetys on käynnistettävä käynnistyksen yhteydessä ja lopetettava se sammutettaessa tai käynnistettäessä uudelleen. Minulla ei ole mitään ongelmia, koska se alkaa aina itsestään ja alkaa ladata (lisäsin sen sovelluksiin käynnistyksen yhteydessä Xfcessä).

      Minun ongelmani on, että jos asetan komentosarjan rc.local- tai init.d-tiedostoon, en tiedä miten tietokone pysäyttää komentosarjan. Toisin sanoen, kun tietokone sammutetaan / käynnistetään uudelleen, kaikki prosessit lopetetaan (ja heidän kanssaan myös Transmission ja Nethogs), mutta en tiedä mitä tapahtuisi skriptilleni.

      Ja miksi se häiritsee minua? Komentosarja luo tiedoston tiedostoon / tmp ja ohjaa lähetysnopeutta. Jos suoritan sen päätelaitteessa ja pysäytän sen yhtäkkiä (esimerkiksi painamalla CTRL + c), komentosarja ennen sulkemista palauttaa oletusnopeudet (jos se on välttämätöntä) ja lopettaa sitten Nethogsin ja poistaa tiedoston / tmp: stä. Yritin tehdä siitä mahdollisimman "ammattimaisen", jotta se ei jätä irtonaisia ​​tiedostoja tai taustaprosesseja.

      Tietoja siitä, mitä sanoit, en ymmärtänyt, mikä "live-sovelluksen välilehti" on.

      1.    Jorge dijo

        Sovellus-välilehti on pysyvä välilehti, se on aina auki ja minimoitu Firefoxissa http://i.imgur.com/a5i0aP3.png (asiayhteysvalikko välilehdellä, napsauta «liitä välilehti»). Kun demonit lähettävät TERM-signaalin, he odottavat jonkin aikaa istunnon päättymisen jälkeen ja tallentavat tietonsa. Huomaa, että linkkiin, jonka annoin aiemmin komentosarjasta poistuttaessa, kutsutaan start-stop-daemon ja käsketään lähetyksen lopettamista, sinne voit liittää "killall nethogs" ja mitä se sisältää StopScript. Tässä tapauksessa init-komentosarja on kutsuttava juureksi tietyn käyttäjän sijaan, koska se tarvitsee käyttöoikeuksia.

        1.    Joaquin dijo

          No kiitos vinkistä. Heti kun minulla on aikaa, yritän sitä!

  4.   facundo dijo

    Hienoa, olen törmännyt tähän epämukavuuteen, koska vaikka sinulla on nopea yhteys, sinun on pakko rajoittaa lähetystä samalla kun haluat selata ja "tuhlata" aikaa.
    Aion kokeilla sitä, kun pystyn. Terveisiä ja kiitoksia!

    1.    Joaquin dijo

      Kiitos sinun! Toivottavasti tämä voi auttaa sinua!

      1.    Facundo dijo

        Hei taas Joaquin. Katson, että huolehdit vastaamisesta kaikkiin kommentteihin, joten aion hyödyntää sitä ja aion esittää sinulle muutaman alokas kysymyksen.
        Ensinnäkin, mistä tiedän, onko "awk" -komentosarja asennettu? Käytän Debian 7.2: tä.
        Toiseksi, en tiedä mitä tehdä liitekoodilla. Minun on tartuttava tekstieditoriin ja tallennettava se tiedostoon nimeltä "bandwidth-controller.sh" ja suoritettava se nimellä "./band-width-control.sh". Tämä on osa, jossa olen eniten eksynyt.
        Kolmas: Kun sanot suorita se juurina, onko sinun vaihdettava käyttäjältä juureksi vai sudolla?

        Jos sinulla on lukemista, joka suosittelisi minua aiheesta, arvostan sitä.
        Tervehdys!

  5.   Giskard dijo

    Siksi poistan aina Transmissionin ja asennan Deluge. No, siihen ja vähän enemmän asioita, joita Deluge tarjoaa minulle, joita toinen ei tuo.

    1.    Joaquin dijo

      Hei, en tiedä vedenpaisumusta. Suurin ongelmani on Internet-palvelu. Tällä puristan sen täysillä.

  6.   panda dijo

    Hei. myös kaistanleveyteni on rajallinen, joten yritin tätä komentosarjaa. Mutta se ei toimi. virhe näyttää olevan nethogs -t -komennossa. se palauttaa virheen "Odottaa ensimmäisen paketin saapumista (katso sourceforge.net bug 1019381)" ja yritin minttua, archlinuxia eikä mitään. Mitä tämän komennon pitäisi palata? Oletan, että minun pitäisi tulostaa pelkkänä tekstinä kunkin sovelluksen käyttämä kaistanleveys. Tiedätkö toisen ohjelman, jonka avulla voit kuunnella verkkoa?

    1.    Joaquin dijo

      Hei, kuinka voit.
      Se on Nethogs-vika. Se näyttää myös minulle, mutta se toimii joka tapauksessa.

      Mitä Nethogs tekee, on näyttää prosessit, jotka kuluttavat eniten kaistanleveyttä, reaaliajassa. Komentosarjassa sen lähtö tallennetaan tekstitiedostoon "net.list", jotta se voidaan suodattaa myöhemmin.

      Komentosarja toimii vain Transmission (BitTorrent-asiakas) ja Firefox (verkkoselain) kanssa. Se rajoittaa lähetyksen kaistanleveyttä, kun Firefox lataa verkkosivua. Sinun on asennettava: Nethogs, Transmission, Transmission-remote ja Firefox.

      Kaikki selitetään postissa, joten en tiedä mikä ongelmasi on.

      PS: Kirjoita oikein ja paranna oikeinkirjoitustasi. Se on kommentti, ei tekstiviesti.

      1.    panda dijo

        käsikirjoitus ei toimi minulle. tulostaa virhesanoman monta kertaa. Suorita "nethogs -t" terminaalissa nähdäksesi mitä se tekee, mutta se ei tulosta mitään, vain virheen. tietokoneellani se ei toimi. Kuvittelen, että sen pitäisi tulostaa jotain samanlaista kuin mitä se tulostaa, kun se suoritetaan ilman -t-arvoa, ja se näyttää prosessit ja kaistanleveyden. mutta minun tapauksessani se ei tulosta mitään. mitä distroa käytit käsikirjoituksen kehittämiseen?

        1.    Joaquin dijo

          Jos katsot tarkkaan, viesti sisältää kaikki käytetyt ohjelmistot ja niiden versiot. En tiedä miksi virhe, mutta se näyttää minulle joka kerta, kun "nethogs -t" suoritetaan. Komentosarjassa se tapahtuu joka 2. tuuma.

          Voi olla, että kun suoritat nethogeja, verkkoa ei käytetä prosessissa, ja siksi et saa mitään tulostusta.

          Komentosarja on suoritettava pääkäyttäjänä, koska nethogs tarvitsee kyseisen käyttäjän toimimaan.

          nyt muistan jotain tärkeää ja tiedän miksi se ei toimi sinulle:

          JOKA MUOKKAA komentosarjaa ja vaihda tavallisen käyttäjän nimi. Käsikirjoituksessa sitä kutsutaan "joaquiniksi". Sinun on vaihdettava se käyttäjänimeksi.

          Valitettavasti en tajunnut sitä, minun olisi pitänyt laittaa nimi muuttujaan. Tapahtuu, että en ajatellut tehdä siitä niin yleistä, halusin vain näyttää sen sinulle, jotta voit nähdä sen ja ne, jotka haluavat, voivat saada ideoita miten se tehdään. En tehnyt sitä tarkoituksella, että se toimisi millä tahansa tietokoneella, mikä vie aikaa ja en tiedä kuinka ohjelmoida, minulle tapahtuu joitain asioita.

          Onnea, mitä tahansa kysytään uudestaan. Ja lue käsikirjoituksen viesti ja kommentit uudelleen.

  7.   Facundo dijo

    Hei Joaquín, kerro minulle seuraava:

    lähetys-kaukosäädin: (http://localhost:9091/transmission/rpc/) Yhteyttä palvelimeen ei voitu muodostaa
    ioctl epäonnistui määritettäessä paikallista IP-osoitetta valitulle laitteelle eth0. Voit määrittää laitteen komentorivillä.

    mitään ideoita?? Kiitos!

    1.    Joaquin dijo

      Hei, kuinka voit.
      Anteeksi, mutta minulla ei ole aavistustakaan 😀
      Sen mukaan, mitä ymmärrän virheen mukaan, se on ongelma ioctl: ssä, mutta en tiedä mikä se on.

      Ehkä voisit yrittää pysäyttää komentosarjan ja nähdä, toimiiko lähetys-kaukosäädin joidenkin sen vaihtoehtojen kanssa (lue sen man-sivu "man" -komennolla).