Script Bash: Controlați automat lățimea de bandă a transmisiei

Salutare tuturor. Aceasta este a doua mea postare. De obicei nu scriu postări decât dacă am ceva bun de împărtășit și de data asta am ceva care cu siguranță mulți vor fi interesați.

Acum câteva luni mă gândeam să realizez un script pentru a limita lățimea de bandă a aplicațiilor, dar am avut câteva probleme și erori care mi-au făcut-o dificilă, așa că mi-am ridicat îndoielile în Foro de <º DesdeLinux în caz că cineva a avut o idee.

Așa că l-am lăsat o vreme și într-o zi am decis să reiau scenariul. Am făcut multe teste, am citit multe despre bash și am avut dureri de cap în timpul liber, dar am făcut-o !!

Am o satisfacție enormă și așa că am decis să vă împărtășesc micul meu scenariu, astfel încât să îl puteți folosi și îmbunătăți. Am de gând să-l licențiez sub GPLv3, dar este primul meu proiect, așa că nu sunt sigur cum să fac acest lucru (am nevoie de sfaturi de la oricine a făcut-o înainte)

Ei bine, acum voi explica care era nevoia mea și ce am făcut pentru a rezolva problema.

Situatie
Am un plan de internet de 512Kbs, prin urmare îl folosesc Transmisie ca client BitTorrent pentru a descărca fișiere mari (cum ar fi LibreOffice și unele distribuții GNU / Linux). Cu această viteză, descărcările durează mult și problema este atunci când utilizați browserul web Firefox: durează mult timp pentru încărcare.

Când mă conectez la Internet, activez limitele de timp pentru încărcare și descărcare ale transmisiei și aștept încărcarea Firefox, apoi pornesc din nou torrentele. După cum veți vedea, a face acest lucru de câteva ori este plictisitor. Ca să nu mai spun că uneori întrerup definitiv toate torrentele și apoi uit să le activez din nou, ducând la timp pierdut de preț pentru încărcarea / descărcarea torrentelor.

Soluție
Pentru această problemă, am decis să creez un script în Bash care să efectueze practic următoarele:

1. Verificați dacă transmisia funcționează și nu există pauze de torrent. Dacă da, reporniți torrentele.

2. Verificați dacă Firefox rulează. Apoi primește KB / s trimise și primite de acesta și le salvează într-un fișier.

3. Dacă încărcarea sau descărcarea KB / s a ​​browserului depășește un interval de referință, setările pentru încărcarea / descărcarea transmisiei sunt modificate.

Acest lucru permite ca, atunci când doriți să accesați o pagină web, când browserul trimite cererea, încărcarea fișierului de transmisie este limitată și când se primesc datele paginii, descărcarea este limitată. Acest lucru funcționează excelent atunci când accesați mai multe pagini simultan, iar rezultatele sunt de fapt aceleași ca și cu transmisia dezactivată.

Marele avantaj este că este complet automat și nu necesită intervenția mea.

Scenariul
Deși ar putea fi utilizat pentru a controla consumul de lățime de bandă al oricărei aplicații, în acest moment este scris doar pentru a rezolva o problemă foarte specială. Dar nu este foarte dificil să faci modificări.

Requisitos
Pentru ca acesta să funcționeze corect este necesar să aveți aplicația «nethogs".

În acest caz, deoarece scriptul funcționează cu Firefox și Transmission, este necesar să aveți aceste aplicații instalate, pe lângă „transmission-remote”, care modifică valorile de încărcare și descărcare ale torrentelor. Folosesc și în scriptul „awk”. O menționez pentru că nu știu dacă toate distribuțiile au instalat.

Software utilizat
O listă a aplicațiilor pe care le folosește scriptul și a sistemului în care funcționează.

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

Execuție
Trebuie rulat ca root deoarece nethogs poate fi rulat numai cu acel utilizator, dar transmisie-telecomandă se execută cu utilizatorul normal prin intermediul comenzii a lui.

Scriptul folosește comanda internă Bash capcană Cu ajutorul căruia este posibilă restabilirea valorilor implicite de încărcare / descărcare a transmisiei, atunci când este oprită de semnalele SIGINT (CTRL + c) sau SIGTERM.

Încă nu sunt sigur cum să procedez pentru al rula la pornire și să mă opresc când opresc sau repornesc computerul. Mă gândeam să pun un link în dosar /etc/rc.local dar nu știu dacă ar funcționa și nu prea înțeleg cum funcționează / etc /init.d (Am văzut câteva scripturi care există, chiar schelet, dar nu le înțeleg). Dacă cineva mă poate ajuta, voi fi foarte recunoscător.

Ei bine, oameni buni, asta e. Sper că mica mea contribuție vă este utilă și că o puteți îmbunătăți dacă doriți. Voi fi bucuros să vă citesc opiniile și recomandările, precum și sugestiile în cazul în care există probleme de securitate cu fișierul (nu sunt programator, fac doar câteva lucruri din când în când).

Știu că, cu unele remedieri, poate deveni o aplicație excelentă în viitor, pentru că nu știu niciun program care să facă același lucru. De exemplu, mi se pare că aș putea avea o interfață grafică în zenitate și să putem alege aplicațiile pe care dorim să le acordăm prioritate în utilizarea lățimii de bandă (browser web, manager de actualizări, transfer de fișiere etc.) și a diferitelor valori de referință. Da, este oarecum ambițios, dar destul de util.

Puteți descărca scriptul în lipi. Multumesc mult pentru citire !!


Lasă comentariul tău

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

*

*

  1. Responsabil pentru date: Miguel Ángel Gatón
  2. Scopul datelor: Control SPAM, gestionarea comentariilor.
  3. Legitimare: consimțământul dvs.
  4. Comunicarea datelor: datele nu vor fi comunicate terților decât prin obligație legală.
  5. Stocarea datelor: bază de date găzduită de Occentus Networks (UE)
  6. Drepturi: în orice moment vă puteți limita, recupera și șterge informațiile.

  1.   plin de viață el a spus

    Oh! Interesant 😀

    1.    eliotime3000 el a spus

      În colțul din stânga jos aveți opțiunea de a limita lățimea de bandă pe care transmisia o consumă atât la încărcare, cât și la descărcare. Cu Transmission nu am avut nicio problemă.

      1.    fursec el a spus

        Dar aceasta este automată și există, de asemenea, transmisie fără o interfață grafică, astfel încât este posibil să nu aveți această funcție atât de aproape.

      2.    Joaquin el a spus

        Salut ce mai faci.
        Da, știu deja asta. Dar exact asta nu vreau să fac.
        Am un plan de internet foarte slab (512 KB și este cel mai bun din zona mea).

        Cu scenariul meu, nu-mi fac griji că fac totul manual. Imaginați-vă că deschideți o pagină în browser și Transmission ocupă toată lățimea de bandă în acel moment, astfel încât pagina durează ceva timp să se încarce (cel mult 1 ′, dar este exasperant). Am terminat cu „activarea limitelor de timp” la fiecare două minute. Acesta este automat și aproape instantaneu (verifică KB-ul trimis și primit de Firefox la fiecare 5 secunde).

        Într-adevăr, în cazul meu cu această viteză de internet, este excelent. De asemenea, nu știu de o altă aplicație care să facă acest lucru, altfel nu ar fi făcut-o. Cele pe care le-am văzut limitează doar lățimea de bandă, dar nu automat.

        Sper că am fost clar. Mulțumesc că ai citit!

        1.    Joaquin el a spus

          Scuze am gresit. Nu sunt 512KB, mai degrabă sunt Kbits. (Adică 1/2 „Mega”). Maximul pe care îl pot descărca este de 75 KB / s și 50 KB / s de încărcare. Că atunci când Internetul este în regulă, altfel normalul este 48 și 23.

    2.    Joaquin el a spus

      Vă mulţumim!

  2.   fursec el a spus

    Interesant, folosesc qBittorrent și folosesc comutatorul pentru limite.

    Postarea arată frumos cu acele culori 😉

    1.    Joaquin el a spus

      Mulțumesc pentru culori. Nu mă pricep la asta, pare foarte lung și monoton cu atât de mult text.

  3.   Jorge el a spus

    Personal, folosesc transmisia-daemon și Firefox cu o filă de aplicație live, așa că nu merg cu programe externe sau uit să continui torrentele sau broasca testoasă activată (și o pot controla de pe telefonul meu). Pentru a porni un serviciu este adăugat un utilizator (ex: adduser –disabled-password nethogs), un fișier text pentru daemon este creat în /etc/init.d cu un nume (ex: nethogs-daemon) și apoi în debian este tastați „update-rc.d nethogs-daemon defaults”, astfel încât să pornească singur.

    Fișierul text este și un script bash, în care vă puteți îmbina scriptul.
    Vedeți dacă acest lucru vă poate ajuta, poate fi folosit pentru a porni transmisia-daemon, poate fi folosit pentru a porni nethogs https://trac.transmissionbt.com/wiki/Scripts/initd

    1.    Joaquin el a spus

      Buna ziua!
      Să vedem dacă înțeleg: aceasta este pentru a porni transmisia la pornire și a o opri la oprire sau repornire. Cu asta nu am probleme, deoarece începe întotdeauna de la sine și începe descărcarea (l-am adăugat la aplicații la pornire în Xfce).

      Problema mea este că dacă pun scriptul în rc.local sau în init.d nu știu cum computerul oprește scriptul. Adică, evident, când opriți / reporniți PC-ul, toate procesele sunt încheiate (și cu ele și Transmission și Nethogs), dar nu știu ce s-ar întâmpla cu scriptul meu.

      Și de ce mă deranjează asta? Scriptul creează un fișier în / tmp și controlează viteza de transmisie. Dacă îl rulez într-un terminal și îl opresc brusc (de exemplu cu CTRL + c), scriptul înainte de închidere restabilește viteza implicită (în cazul în care este necesar) și apoi oprește Nethogs și șterge fișierul din / tmp. Am încercat să-l fac cât mai „profesional” posibil, astfel încât să nu lase niciun fișier liber sau procese de fundal.

      Despre ceea ce ai spus, nu am înțeles ce este „fila aplicației live”.

      1.    Jorge el a spus

        O filă de aplicație este o filă permanentă, este întotdeauna deschisă și minimizată în Firefox http://i.imgur.com/a5i0aP3.png (meniul contextual de pe filă, faceți clic pe «lipiți filă»). Când demonii trimit semnal TERM, așteaptă un timp, până după închiderea sesiunii și își salvează datele. Rețineți că în link-ul pe care l-am dat înainte la ieșirea din script apeluri start-stop-daemon și spune transmisiei să se oprească, acolo puteți lipi „killall nethogs” și ce conține StopScript. Scriptul init în acest caz ar trebui să-l numiți ca root în loc de un anumit utilizator, deoarece are nevoie de privilegii.

        1.    Joaquin el a spus

          Ei bine, mulțumesc pentru pont. De îndată ce am timp, îl încerc!

  4.   Facundo el a spus

    minunat, am dat peste acest dezavantaj, deoarece chiar dacă aveți o conexiune rapidă, sunteți forțați să limitați transmisia în timp ce doriți să navigați și astfel să "pierdeți" timpul.
    O să încerc când pot. Salutări și mulțumiri !!

    1.    Joaquin el a spus

      Multumita tie! Sper că acest lucru vă poate ajuta!

      1.    facundo el a spus

        Bună ziua Joaquin. Văd că aveți grijă să răspundeți la toate comentariile, așa că voi profita de acest lucru și vă voi pune câteva întrebări începătoare.
        În primul rând, de unde să știu dacă am instalat scriptul „awk”? Folosesc Debian 7.2.
        În al doilea rând, nu știu ce să fac cu codul de lipire. Trebuie să iau un editor de text și să-l salvez într-un fișier numit „bandwidth-controller.sh” și apoi să-l rulez ca „./band-width-control.sh”. Aceasta este partea în care sunt cel mai pierdut.
        În al treilea rând: Când spui să-l rulezi ca root, este necesar să treci de la utilizator la root sau este suficient cu sudo?

        Dacă aveți vreo lectură care să mă recomande pe acest subiect, o apreciez.
        Salutări!

  5.   giskard el a spus

    De aceea, dezinstalez întotdeauna Transmission și instalez Deluge. Ei bine, pentru asta și ceva mai multe lucruri pe care mi le oferă Deluge pe care celălalt nu le aduce.

    1.    Joaquin el a spus

      Bună, nu știu Deluge. Principala mea problemă este serviciul de internet. Cu aceasta obțin cel mai mult din asta.

  6.   panda el a spus

    Salut. lățimea mea de bandă este, de asemenea, limitată, așa că am încercat acest script. Dar nu funcționează. eroarea pare a fi în comanda nethogs -t. returnează eroarea „Se așteaptă sosirea primului pachet (vezi eroarea sourceforge.net 1019381)” Am încercat mint, archlinux și nimic. Ce ar trebui să se întoarcă acea comandă? Presupun că ar trebui să tipăresc în text simplu lățimea de bandă utilizată de fiecare aplicație. Cunoașteți un alt program care vă permite să ascultați rețeaua?

    1.    Joaquin el a spus

      Salut ce mai faci.
      Acesta este un bug Nethogs. Mi se pare și mie, dar funcționează oricum.

      Ceea ce face Nethogs este să arate procesele care consumă cea mai mare lățime de bandă, în timp real. În script, ieșirea sa este salvată într-un fișier text „net.list”, astfel încât să poată fi filtrat ulterior.

      Scriptul funcționează numai cu Transmission (un client BitTorrent) și Firefox (browser web). Ceea ce face este să limiteze lățimea de bandă a transmisiei atunci când Firefox încarcă o pagină web. Trebuie să instalați: Nethogs, Transmission, Transmission-remote și Firefox.

      Totul este explicat în postare, așa că nu știu care este problema ta.

      PS: Vă rugăm să scrieți corect și să vă îmbunătățiți ortografia. Este un comentariu, nu un mesaj text.

      1.    panda el a spus

        scenariul nu funcționează pentru mine. imprimă de multe ori acel mesaj de eroare. rulați „nethogs -t” într-un terminal pentru a vedea ce face, dar nu imprimă nimic, doar eroarea. pe computerul meu nu funcționează. Îmi imaginez că ar trebui să imprime ceva similar cu ceea ce imprimă atunci când este executat fără -t, arătând procesele și lățimea de bandă. dar în cazul meu nu imprimă nimic din toate acestea. ce distribuție ați folosit pentru a dezvolta scenariul?

        1.    Joaquin el a spus

          Dacă priviți cu atenție, postarea conține tot software-ul folosit și versiunile sale. Nu știu de ce eroarea, dar mi se pare de fiecare dată când se execută „nethogs -t”. În script se va întâmpla la fiecare 2 ″.

          Este posibil ca atunci când rulați nethogs, să nu existe niciun proces care să folosească rețeaua și de aceea nu obțineți nicio ieșire.

          Scriptul trebuie rulat ca root deoarece nethogs are nevoie de acel utilizator pentru a funcționa.

          acum mi-am amintit ceva important și știu de ce nu funcționează pentru tine:

          TREBUIE SĂ EDITAȚI scriptul și să schimbați numele utilizatorului normal. În scenariu se numește „joaquin”. Trebuie să îl schimbați în numele dvs. de utilizator.

          Îmi pare rău că nu mi-am dat seama de asta, ar fi trebuit să pun numele într-o variabilă. Chestia este că nu m-am gândit să o fac atât de generală, am vrut doar să ți-o arăt, astfel încât să o poți vedea și cei care doresc să poată obține idei despre cum să o faci. Nu am făcut-o cu intenția că ar funcționa pe orice computer, care durează timp și nu știu să programez, mi se întâmplă niște lucruri.

          Noroc, orice cere din nou. Și vă rugăm să citiți din nou postarea și comentariile scenariului.

  7.   facundo el a spus

    Bună Joaquín, spune-mi următoarele:

    transmisie-telecomandă: (http://localhost:9091/transmission/rpc/) Nu s-a putut conecta la server
    ioctl a eșuat la stabilirea IP-ului local pentru dispozitivul eth0 selectat. Puteți specifica dispozitivul pe linia de comandă.

    vreo idee?? Mulțumiri!

    1.    Joaquin el a spus

      Salut ce mai faci.
      Scuză-mă, dar habar nu am 😀
      Din câte am înțeles, spune eroarea, este o problemă cu ioctl, dar nu știu ce este asta.

      Poate ați putea încerca să opriți scriptul și să vedeți dacă transmisia-telecomandă funcționează cu unele dintre opțiunile sale (citiți pagina sa de manual cu comanda „man”).