Script Bash: Automātiski kontrolējiet pārraides joslas platumu

Sveiki visiem. Šis ir mans otrais ieraksts. Es parasti nerakstu ziņas, ja vien man nav kaut kas labs, ar ko dalīties, un šoreiz man ir kaut kas tāds, kas noteikti interesēs daudzus.

Pirms dažiem mēnešiem es domāju izveidot skriptu, lai ierobežotu lietojumprogrammu joslas platumu, taču man bija dažas problēmas un kļūdas, kas man to apgrūtināja, tāpēc es sacīju savas šaubas par forums de <º DesdeLinux ja kādam būtu ideja.

Tāpēc es uz laiku to atstāju un vienu dienu nolēmu atsākt scenāriju. Es daudz testēju, daudz lasīju par bash, un brīvajā laikā man sāpēja galva, bet es to izdarīju !!

Man ir milzīgs gandarījums, tāpēc esmu nolēmis dalīties ar jums savā mazajā scenārijā, lai jūs varētu to izmantot un uzlabot. Es plānoju to licencēt saskaņā ar GPLv3, taču tas ir mans pirmais projekts, tāpēc neesmu īsti pārliecināts, kā to izdarīt (man vajag padomu no tā, kurš to jau ir izdarījis).

Nu, tagad es paskaidrošu, kāda bija mana vajadzība un ko es darīju, lai atrisinātu problēmu.

Situācija
Man ir interneta plāns 512 KB, tāpēc izmantoju transmisija kā BitTorrent klientu, lai lejupielādētu lielus failus (piemēram, LibreOffice un dažus GNU / Linux distros). Ar šo ātrumu lejupielādes prasa ilgu laiku, un problēma ir tīmekļa pārlūka lietošanā Firefox: ielāde prasa ilgu laiku.

Kad izveidoju savienojumu ar internetu, es aktivizēju pārraides augšupielādes un lejupielādes laika ierobežojumus un gaidu, kamēr Firefox tiks ielādēts, pēc tam atkal sāksim straumēšanu. Kā redzēsiet, pāris reizes to darīt ir garlaicīga. Nemaz nerunājot par to, ka dažreiz es tieši pārtraucu visus straumējumus un pēc tam aizmirstu tos atkal aktivizēt, kas noved pie izšķērdēta vērtīgā laika straumju augšupielādei / lejupielādei.

Šķīdums
Šai problēmai es nolēmu izveidot Bash skriptu, kas pamatā veic šādas darbības:

1. Pārbaudiet, vai pārraide darbojas un vai neviens straumējums nav apturēts. Ja tā, ieslēdziet straumes vēlreiz.

2. Pārbaudiet, vai darbojas Firefox. Pēc tam tā nosūta un saņem KB / s un saglabā tos failā.

3. Ja pārlūka augšupielādes / lejupielādes KB / s pārsniedz atsauces diapazonu, tiek mainīti pārraides augšupielādes / lejupielādes iestatījumi.

Tas ļauj, ja vēlas piekļūt tīmekļa lapai, kad pārlūkprogramma nosūta pieprasījumu, pārsūtīšanas faila augšupielāde ir ierobežota un, saņemot lapas datus, lejupielāde ir ierobežota. Tas darbojas lieliski, ja vienlaikus piekļūstat vairākām lappusēm, un rezultāti faktiski ir tādi paši kā ar atspējotu pārraidi.

Lielā priekšrocība ir tā, ka tā ir pilnībā automātiska un neprasa manu iejaukšanos.

Scenārijs
Lai gan to varētu izmantot, lai kontrolētu jebkuras lietojumprogrammas joslas platuma patēriņu, šobrīd tas ir rakstīts tikai ļoti konkrētas problēmas risināšanai. Bet modificēt nav ļoti grūti.

Prasības
Lai tā darbotos pareizi, ir nepieciešama lietojumprogramma «tīkli'.

Šajā gadījumā, tā kā skripts darbojas ar Firefox un Transmission, ir jāinstalē šīs lietojumprogrammas, papildus "pārraidei-tālvadībai", kas maina straumju augšupielādes un lejupielādes vērtības. Es arī izmantoju skriptā "awk". Es to pieminu, jo nezinu, vai visos rajonos tas ir uzstādīts.

Lietotā programmatūra
Skripta izmantoto lietojumprogrammu un sistēmas, kurā tā darbojas, saraksts.

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

Izpildīšana
Tas jādarbina kā root, jo tīkli var palaist tikai ar šo lietotāju, bet pārraide-tālvadība tas tiek izpildīts ar parasto lietotāju, izmantojot komandu viņa.

Skripts izmanto iekšējo Bash komandu lamatas Ar kuru palīdzību ir iespējams atjaunot pārraides slodzes / izkraušanas noklusējuma vērtības, kad tā tiek apturēta ar SIGINT (CTRL + c) vai SIGTERM signāliem.

Es joprojām nezinu, kā to palaist, startējot un pārtraukt, kad es izslēdzu vai restartēju datoru. Es domāju ievietot saiti failā /etc/rc.local bet es nezinu, vai tas darbotos, un es īsti nesaprotu, kā / etc / darbojasinic.d (Es redzēju dažus scenārijus, kas tur ir, pat skelets, bet es viņus nesaprotu). Ja kāds man var palīdzēt, būšu ļoti pateicīgs.

Nu ļaudis, tas tā. Es ceru, ka mans mazais ieguldījums jums ir noderīgs un ka jūs varat to uzlabot, ja vēlaties. Ar prieku lasīšu jūsu viedokļus un ieteikumus, kā arī ieteikumus gadījumā, ja ar failu ir drošības problēmas (es neesmu programmētājs, es laiku pa laikam daru tikai dažas lietas).

Es zinu, ka ar dažiem labojumiem tas nākotnē var kļūt par lielisku lietojumprogrammu, jo es nezinu nevienu programmu, kas rīkotos tāpat. Piemēram, man šķiet, ka man varētu būt grafiskā saskarne zenness un lai varētu izvēlēties lietojumprogrammas, kurām vēlamies piešķirt prioritāti joslas platuma izmantošanā (tīmekļa pārlūks, atjauninājumu pārvaldnieks, failu pārsūtīšana utt.) un dažādas atsauces vērtības. Jā, tas ir nedaudz ambiciozs, bet diezgan noderīgs.

Skriptu var lejupielādēt vietnē makaroni. Liels paldies par lasīšanu !!


23 komentāri, atstājiet savus

Atstājiet savu komentāru

Jūsu e-pasta adrese netiks publicēta. Obligātie lauki ir atzīmēti ar *

*

*

  1. Atbildīgais par datiem: Migels Ángels Gatóns
  2. Datu mērķis: SPAM kontrole, komentāru pārvaldība.
  3. Legitimācija: jūsu piekrišana
  4. Datu paziņošana: Dati netiks paziņoti trešām personām, izņemot juridiskus pienākumus.
  5. Datu glabāšana: datu bāze, ko mitina Occentus Networks (ES)
  6. Tiesības: jebkurā laikā varat ierobežot, atjaunot un dzēst savu informāciju.

  1.   dzīvīgs teica

    Ak! Interesanti 😀

    1.    3000 teica

      Apakšējā kreisajā stūrī ir iespēja ierobežot joslas platumu, ko pārraide patērē gan augšupielādējot, gan lejupielādējot. Ar Transmisiju man nav bijis nekādu problēmu ar to.

      1.    cepums teica

        Bet tas ir automātisks, un ir arī pārraide bez grafiskā interfeisa, tāpēc jums, iespējams, šī funkcija nav tik tuvu.

      2.    Joaquin teica

        Sveiks kā tev iet.
        Jā, es jau to zinu. Bet tieši to es negribu darīt.
        Man ir ļoti slikts interneta plāns (512 KB un tas ir labākais manā reģionā).

        Izmantojot savu scenāriju, es neuztraucos visu darīt ar rokām. Iedomājieties, ka pārlūkprogrammā atverat lapu, un pārraide tajā brīdī aizņem visu joslas platumu, tāpēc lapas ielāde aizņem kādu laiku (ne vairāk kā 1 ′, bet tas ir aizraujoši). Es esmu pabeidzis "laika ierobežojumu aktivizēšanu" ik pēc divām minūtēm. Tas ir automātiski un gandrīz uzreiz (tas ik pēc 5 sekundēm pārbauda Firefox nosūtīto un saņemto KB).

        Manā gadījumā ar šo interneta ātrumu tas ir lieliski. Es arī nezinu nevienu citu lietojumprogrammu, kas to darītu, pretējā gadījumā tā to nebūtu izdarījusi. Tie, kurus esmu redzējis, ierobežo tikai joslas platumu, bet ne automātiski.

        Es ceru, ka man bija skaidrs. Paldies par lasīšanu!

        1.    Joaquin teica

          Atvainojiet, es kļūdījos. Tie nav 512 KB, drīzāk tie ir Kbit. (Tas ir, 1/2 "Mega"). Maksimums, ko es varu lejupielādēt, ir 75 KB / s un 50 KB / s augšupielāde. Tas ir tad, kad internets ir kārtībā, pretējā gadījumā normāls ir 48 un 23.

    2.    Joaquin teica

      Paldies!

  2.   cepums teica

    Interesanti, ka es izmantoju qBittorrent un slēdzi izmantoju ierobežojumiem.

    Ziņa izskatās jauki ar šīm krāsām 😉

    1.    Joaquin teica

      Paldies par krāsām. Es to ne pārāk labi pārzinu, tas šķiet ļoti garš un vienmuļš ar tik daudz teksta.

  3.   Jorge teica

    Personīgi es izmantoju pārsūtīšanas dēmonu un Firefox ar tiešraides lietojumprogrammu cilni, tāpēc es nestaigāju ar ārējām programmām vai aizmirstot turpināt straumēm vai aktivēto bruņurupuci (un es to varu kontrolēt no sava tālruņa). Lai sāktu pakalpojumu, tiek pievienots lietotājs (piemēram: adduser –disabled-password nethogs), mapē /etc/init.d tiek izveidots dēmona teksta fails ar nosaukumu (piemēram: nethogs-daemon) un pēc tam debian ierakstiet "update-rc.d nethogs-daemon defaults", lai tas pats sāktu darboties.

    Arī teksta fails ir bash skripts, kurā varat apvienot skriptu.
    Skatiet, vai tas var jums palīdzēt, to var izmantot, lai sāktu pārraides-dēmonu, to var izmantot, lai palaistu nethogs https://trac.transmissionbt.com/wiki/Scripts/initd

    1.    Joaquin teica

      Labdien!
      Pārbaudiet, vai es saprotu: tas ir paredzēts, lai palaistu pārraidi startēšanas laikā un apturētu to, izslēdzot vai restartējot. Ar to man nav problēmu, jo tas vienmēr sākas pats no sevis un sāk lejupielādēt (es to pievienoju lietojumprogrammām, startējot Xfce).

      Mana problēma ir tāda, ka, ievietojot skriptu rc.local vai init.d, es nezinu, kā dators aptur skriptu. Tas ir, acīmredzot, izslēdzot / restartējot datoru, visi procesi tiek pārtraukti (un kopā ar tiem arī Transmission un Nethogs), bet es nezinu, kas notiktu ar manu skriptu.

      Un kāpēc tas mani traucē? Skripts izveido failu mapē / tmp un kontrolē pārraides ātrumu. Ja es palaidu to terminālā un pēkšņi to pārtraucu (piemēram, ar CTRL + c), skripts pirms aizvēršanas atjauno noklusējuma ātrumu (ja tas ir nepieciešams) un pēc tam aptur Nethogs un izdzēš failu no / tmp. Es centos to padarīt pēc iespējas "profesionālāku", lai tas neatstātu vaļīgus failus vai fona procesus.

      Par to, ko jūs teicāt, es nesapratu, kas ir "tiešraides lietojumprogrammu cilne".

      1.    Jorge teica

        Lietojumprogrammu cilne ir pastāvīga cilne, Firefox tā vienmēr ir atvērta un samazināta līdz minimumam http://i.imgur.com/a5i0aP3.png (konteksta izvēlne cilnē noklikšķiniet uz «ielīmēt cilni»). Kad dēmoni sūta TERM signālu, viņi kādu laiku gaida, līdz pēc atteikšanās, un saglabā savus datus. Ņemiet vērā, ka saitē, kuru es iepriekš devu, izejot no skripta, izsauc start-stop-daemon un liek pārraidei pārtraukt, tur jūs varat ielīmēt "killall nethogs" un to, kas tajā satur StopScript. Šajā gadījumā init skripts jums būs jāsauc par root kā konkrētu lietotāju, jo tam ir vajadzīgas privilēģijas.

        1.    Joaquin teica

          Nu paldies par padomu. Tiklīdz man ir laiks, es to izmēģinu!

  4.   facundo teica

    lieliski, es esmu saskāries ar šo trūkumu, jo, pat ja jums ir ātrs savienojums, jūs esat spiests ierobežot pārraidi, kamēr vēlaties sērfot un tādējādi "tērēt" laiku.
    Es to izmēģināšu, kad varēšu. Sveiciens un paldies !!

    1.    Joaquin teica

      Pateicoties tev! Ceru, ka tas var jums palīdzēt!

      1.    facundo teica

        Sveiks atkal Joaquin. Es redzu, ka jūs rūpējaties par atbildēm uz visiem komentāriem, tāpēc es to izmantošu un uzdošu jums dažus iesācēju jautājumus.
        Pirmkārt, kā es varu zināt, vai man ir instalēts skripts "awk"? Es izmantoju Debian 7.2.
        Otrkārt, es nezinu, ko darīt ar ielīmēšanas kodu. Man ir jāpaķer teksta redaktors un jāsaglabā failā ar nosaukumu “bandwidth-controller.sh” un pēc tam palaidiet to kā “./band-width-control.sh”. Šī ir tā daļa, kur es esmu visvairāk pazudis.
        Treškārt: kad jūs sakāt, ka palaižat to kā root, vai ir jāpārslēdzas no lietotāja uz root vai pietiek ar sudo?

        Ja jums ir kāds lasījums, kas man ieteiktu par šo tēmu, es to novērtēju.
        Sveicieni!

  5.   Giskards teica

    Tāpēc es vienmēr atinstalēju Transmisiju un instalēju Deluge. Nu, par to un vēl nedaudz lietām, ko man piedāvā Deluge, kuras otra nenes.

    1.    Joaquin teica

      Sveiki, es nepazīstu Deluge. Mana galvenā problēma ir interneta pakalpojums. Ar šo es to saspiežu līdz galam.

  6.   panda teica

    Sveiki. mans joslas platums arī ir ierobežots, tāpēc es izmēģināju šo skriptu. Bet tas nedarbojas. šķiet, ka kļūda ir komandā nethogs -t. tas atgriež kļūdu "Gaida pirmās paketes atnākšanu (skat. sourceforge.net bug 1019381)", un es izmēģināju piparmētru, archlinux un neko. Ko šai komandai vajadzētu atgriezties? Es pieņemu, ka man vajadzētu vienkāršā tekstā izdrukāt joslas platumu, ko izmanto katra lietojumprogramma. Vai jūs zināt citu programmu, kas ļauj klausīties tīklu?

    1.    Joaquin teica

      Sveiks kā tev iet.
      Tā ir kļūda Nethogs. Arī man tas šķiet, bet tik un tā tas darbojas.

      Tas, ko dara Nethogs, reālajā laikā parāda procesus, kas patērē visvairāk joslas platumu. Skriptā tā izeja tiek saglabāta teksta failā "net.list", lai to vēlāk varētu filtrēt.

      Skripts darbojas tikai ar Transmission (BitTorrent klients) un Firefox (tīmekļa pārlūks). Tas ierobežo pārraides joslas platumu, kad Firefox ielādē tīmekļa lapu. Jums jāinstalē: Nethogs, Transmission, Transmission-remote un Firefox.

      Tas viss ir izskaidrots ierakstā, tāpēc es nezinu, kāda ir jūsu problēma.

      PS: Lūdzu, rakstiet pareizi un uzlabojiet pareizrakstību. Tas ir komentārs, nevis īsziņa.

      1.    panda teica

        scenārijs man neder. daudzas reizes izdrukā šo kļūdas ziņojumu. palaidiet terminālu "nethogs -t", lai redzētu, ko tas dara, bet tas neko nedrukā, tikai kļūda. uz mana datora tas nedarbojas. Es iedomājos, ka tam vajadzētu izdrukāt kaut ko līdzīgu tam, ko tas izdrukā, darbojoties bez -t, parādot procesus un joslas platumu. bet manā gadījumā tas neko nedrukā. kuru distro jūs izmantojāt, lai izstrādātu skriptu?

        1.    Joaquin teica

          Ja paskatās uzmanīgi, ierakstā ir visa izmantotā programmatūra un tās versijas. Es nezinu, kāpēc kļūda, bet tā man parādās katru reizi, kad tiek palaists "nethogs -t". Skriptā tas notiks ik pēc 2 collām.

          Var gadīties, ka, palaižot nethogs, tīkls netiek izmantots, un tāpēc jūs nesaņemat nevienu izvadi.

          Skripts ir jādarbina kā root, jo nethogs ir nepieciešams, lai šis lietotājs darbotos.

          tagad es atcerējos kaut ko svarīgu un zinu, kāpēc tas jums nedarbojas:

          JUMS JĀREDITĒ skripts un jāmaina parastā lietotāja vārds. Skriptā to sauc par "joaquin". Jums tas jāmaina uz savu lietotājvārdu.

          Atvainojiet, es to nesapratu, man vajadzēja ielikt vārdu mainīgajā. Lieta ir tāda, ka es nedomāju to padarīt tik vispārīgu, es tikai gribēju to parādīt jums, lai jūs to redzētu, un tie, kas vēlas, varētu iegūt idejas, kā to izdarīt. Es to nedarīju ar nodomu, ka tas darbosies uz jebkura datora, tas prasa laiku, un es nezinu, kā programmēt, dažas lietas notiek ar mani.

          Labu veiksmi, kaut ko jautā vēlreiz. Un, lūdzu, vēlreiz izlasiet rakstu un komentārus.

  7.   facundo teica

    Sveiks, Joaquín, pasaki man sekojošo:

    tālvadības pārraide: (http://localhost:9091/transmission/rpc/) Nevarēja izveidot savienojumu ar serveri
    Izveidojot vietējo IP izvēlētajai ierīcei eth0, ioctl neizdevās. Ierīci varat norādīt komandrindā.

    kādas idejas?? Paldies!

    1.    Joaquin teica

      Sveiks kā tev iet.
      Atvainojiet, bet man nav ne jausmas 😀
      Pēc tā, kā es saprotu kļūdu, tā ir problēma ar ioctl, bet es nezinu, kas tas ir.

      Varbūt jūs varētu mēģināt apturēt skriptu un noskaidrot, vai pārraides tālvadība darbojas ar dažām tā opcijām (izlasiet tā man lapu ar komandu "man").