Script Bash: Automatyczna kontrola przepustowości transmisji

Cześć wszystkim. To jest mój drugi post. Zwykle nie piszę postów, chyba że mam coś dobrego do udostępnienia i tym razem mam coś, co z pewnością zainteresuje wielu.

Kilka miesięcy temu zastanawiałem się nad stworzeniem skryptu ograniczającego przepustowość aplikacji, ale miałem pewne problemy i błędy, które mi to utrudniały, więc swoje wątpliwości zgłosiłem w foro de <º DesdeLinux gdyby ktoś miał pomysł.

Zostawiłem więc to na chwilę i pewnego dnia postanowiłem wznowić scenariusz. Zrobiłem dużo testów, dużo czytałem o bashu i miałem bóle głowy w wolnym czasie, ale zrobiłem to !!

Mam ogromną satysfakcję, dlatego postanowiłem podzielić się z Wami moim małym skryptem, abyście mogli go używać i ulepszać. Planuję licencjonować go w ramach GPLv3, ale to mój pierwszy projekt, więc nie jestem do końca pewien, jak to zrobić (potrzebuję rady od tego, kto zrobił to wcześniej).

Cóż, teraz wyjaśnię, jakie były moje potrzeby i co zrobiłem, aby rozwiązać problem.

Sytuacja
Mam plan internetowy o wielkości 512Kbs, dlatego używam Transmisja jako klient BitTorrent do pobierania dużych plików (takich jak LibreOffice i niektóre dystrybucje GNU / Linux). Przy takiej szybkości pobieranie zajmuje dużo czasu, a problem występuje podczas korzystania z przeglądarki internetowej Firefox: ładowanie zajmuje dużo czasu.

Kiedy łączę się z Internetem, aktywuję limity czasowe wysyłania i pobierania transmisji i czekam na załadowanie przeglądarki Firefox, a następnie ponownie uruchamiam torrenty. Jak zobaczysz, robienie tego kilka razy jest żmudne. Nie wspominając o tym, że czasami po prostu wstrzymuję wszystkie torrenty, a następnie zapominam o ich ponownej aktywacji, co prowadzi do marnowania cennego czasu na przesyłanie / pobieranie torrentów.

Rozwiązanie
W przypadku tego problemu zdecydowałem się stworzyć skrypt Bash, który zasadniczo wykonuje następujące czynności:

1. Sprawdź, czy transmisja jest uruchomiona i żaden torrent nie jest wstrzymany. Jeśli tak, włącz ponownie torrenty.

2. Sprawdź, czy Firefox jest uruchomiony. Następnie pobiera KB / s wysłane i odebrane przez siebie i zapisuje je w pliku.

3. Jeśli prędkość przesyłania lub pobierania w przeglądarce przekracza zakres odniesienia, ustawienia wysyłania / pobierania transmisji ulegają zmianie.

Dzięki temu w przypadku chęci dostępu do strony internetowej, gdy przeglądarka wysyła żądanie, wysyłanie pliku transmisyjnego jest ograniczone, a po odebraniu danych strony pobieranie jest ograniczone. Działa to świetnie, gdy uzyskujesz dostęp do wielu stron jednocześnie, a wyniki są w rzeczywistości takie same, jak przy wyłączonej transmisji.

Ogromną zaletą jest to, że jest w pełni automatyczny i nie wymaga mojej interwencji.

Scenariusz
Chociaż może być używany do kontrolowania wykorzystania przepustowości dowolnej aplikacji, w tej chwili jest napisany tylko w celu rozwiązania bardzo konkretnego problemu. Ale modyfikacje nie są trudne.

Wymagania
Do prawidłowego działania niezbędne jest posiadanie aplikacji «nethogi".

W tym przypadku, ponieważ skrypt działa z Firefoksem i Transmisją, konieczne jest zainstalowanie tych aplikacji, oprócz „transmisji zdalnej”, która zmienia wartości wysyłania i pobierania torrentów. Używam również w skrypcie „awk”. Wspominam o tym, ponieważ nie wiem, czy wszystkie dystrybucje mają to zainstalowane.

Użyte oprogramowanie
Lista aplikacji używanych przez skrypt i systemu, w którym działa.

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

Wykonanie
Musi być uruchamiany jako root, ponieważ nethogi można uruchomić tylko z tym użytkownikiem, ale zdalna transmisja jest wykonywany przez zwykłego użytkownika za pomocą polecenia su.

Skrypt używa wewnętrznego polecenia Bash pułapka Dzięki któremu możliwe jest przywrócenie domyślnych wartości ładowania / rozładowania transmisji, gdy jest ona zatrzymywana przez sygnały SIGINT (CTRL + c) lub SIGTERM.

Nadal nie jestem pewien, jak to zrobić, aby uruchomić go podczas uruchamiania i zatrzymać, gdy zamykam lub ponownie uruchamiam komputer. Myślałem o umieszczeniu linku w pliku /etc/rc.local ale nie wiem, czy to zadziała, i naprawdę nie rozumiem, jak działa / etc /inicj.d (Widziałem nawet kilka skryptów, które tam są szkielet, ale ich nie rozumiem). Jeśli ktoś może mi pomóc, będę bardzo wdzięczny.

Cóż, ludzie, to wszystko. Mam nadzieję, że mój mały wkład jest dla Ciebie przydatny i jeśli chcesz, możesz go ulepszyć. Chętnie przeczytam Wasze opinie i rekomendacje oraz sugestie w przypadku problemów z bezpieczeństwem pliku (nie jestem programistą, od czasu do czasu robię tylko kilka rzeczy).

Wiem, że z niektórymi poprawkami może stać się w przyszłości świetną aplikacją, ponieważ nie znam żadnego programu, który robi to samo. Na przykład wydaje mi się, że mógłbym mieć interfejs graficzny w Zenity i możliwość wyboru aplikacji, które chcemy nadać priorytet w zakresie wykorzystania przepustowości (przeglądarka internetowa, menedżer aktualizacji, transfer plików itp.) oraz różne wartości odniesienia. Tak, jest dość ambitny, ale całkiem przydatny.

Możesz pobrać skrypt w pliku makaron. Dziękuję bardzo za przeczytanie !!


Zostaw swój komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

*

*

  1. Odpowiedzialny za dane: Miguel Ángel Gatón
  2. Cel danych: kontrola spamu, zarządzanie komentarzami.
  3. Legitymacja: Twoja zgoda
  4. Przekazywanie danych: Dane nie będą przekazywane stronom trzecim, z wyjątkiem obowiązku prawnego.
  5. Przechowywanie danych: baza danych hostowana przez Occentus Networks (UE)
  6. Prawa: w dowolnym momencie możesz ograniczyć, odzyskać i usunąć swoje dane.

  1.   pełen życia powiedział

    O! Ciekawe 😀

    1.    Eliotime3000 powiedział

      W lewym dolnym rogu masz opcję ograniczenia przepustowości, którą Transmisja zużywa zarówno podczas wysyłania, jak i pobierania. Z Transmisją nie miałem z tym żadnego problemu.

      1.    ciastko powiedział

        Ale jest to automatyczne, a także transmisja bez interfejsu graficznego, więc możesz nie mieć tej funkcji tak przydatnej.

      2.    Joaquin powiedział

        Witam, jak się masz.
        Tak, już to wiem. Ale to jest dokładnie to, czego nie chcę robić.
        Mam bardzo kiepski abonament internetowy (512KB i jest najlepszy w mojej okolicy).

        W moim scenariuszu nie martwię się, że zrobię wszystko ręcznie. Wyobraź sobie, że otwierasz stronę w przeglądarce i transmisja zajmuje w tym momencie całe pasmo, więc ładowanie strony zajmuje trochę czasu (najwyżej 1 ′, ale jest to irytujące). Skończyłem z „aktywowaniem limitów czasowych” co dwie minuty. Jest to automatyczne i prawie natychmiastowe (sprawdza KB wysyłane i odbierane przez przeglądarkę Firefox co 5 sekund).

        Naprawdę w moim przypadku z taką prędkością internetu jest znakomita. Nie znam też innej aplikacji, która to robi, inaczej by tego nie zrobiła. Te, które widziałem, ograniczają tylko przepustowość, ale nie automatycznie.

        Mam nadzieję, że było jasne. Dziękuję za przeczytanie!

        1.    Joaquin powiedział

          Przepraszam pomyliłam się. Nie mają 512KB, są to raczej kbity. (To znaczy 1/2 "Mega"). Maksymalne możliwe pobranie to 75 KB / si 50 KB / s przesyłania. To wtedy, gdy Internet jest w porządku, w przeciwnym razie normalny to 48 i 23.

    2.    Joaquin powiedział

      Dzięki!

  2.   ciastko powiedział

    Co ciekawe, używam qBittorrent i używam przełącznika do limitów.

    Post ładnie wygląda z tymi kolorami 😉

    1.    Joaquin powiedział

      Dzięki za kolory. Nie jestem w tym dobry, wydaje się bardzo długi i monotonna przy tak dużej ilości tekstu.

  3.   Jorge powiedział

    Osobiście używam demona transmisji i firefoxa z zakładką aplikacji na żywo, więc nie uruchamiam się z zewnętrznymi programami ani nie zapominam o kontynuowaniu torrentów lub aktywowanego żółwia (i mogę nim sterować z mojego telefonu). Aby uruchomić usługę, dodaj użytkownika (np .: adduser –disabled-password nethogs), utwórz plik tekstowy dla demona w /etc/init.d z nazwą (np .: nethogs-daemon), a następnie w typie debiana "aktualizacja -rc.d nethogs-daemon defaults ", więc uruchamia się sam.

    Plik tekstowy jest również skryptem bash, do którego możesz dołączyć swój skrypt.
    Zobacz, czy to ci pomoże, może być użyte do uruchomienia demona transmisji, może być użyte do uruchomienia nethogów https://trac.transmissionbt.com/wiki/Scripts/initd

    1.    Joaquin powiedział

      Witaj!
      Zobaczmy, czy rozumiem: to jest rozpoczęcie transmisji podczas uruchamiania i zatrzymanie podczas zamykania lub ponownego uruchamiania. Z tym nie mam żadnych problemów, ponieważ zawsze uruchamia się sam i zaczyna pobierać (dodałem go do aplikacji przy starcie w Xfce).

      Mój problem polega na tym, że jeśli umieszczę skrypt w rc.local lub init.d nie wiem, w jaki sposób komputer zatrzymuje skrypt. Oznacza to, że oczywiście podczas zamykania / ponownego uruchamiania komputera wszystkie procesy są przerywane (a wraz z nimi także Transmission i Nethogs), ale nie wiem, co stałoby się z moim skryptem.

      I dlaczego to mi przeszkadza? Skrypt tworzy plik w / tmp i kontroluje prędkość transmisji. Jeśli uruchomię go na terminalu i nagle zatrzymam (na przykład za pomocą CTRL + c), skrypt przed zamknięciem przywraca domyślne prędkości (jeśli to konieczne), a następnie zatrzymuje Nethogs i usuwa plik z / tmp. Starałem się, aby był jak najbardziej „profesjonalny”, aby nie pozostawiał żadnych luźnych plików ani procesów w tle.

      Co do tego, co powiedziałeś, nie rozumiem, co to jest „karta aplikacji na żywo”.

      1.    Jorge powiedział

        Karta aplikacji to karta stała, jest zawsze otwarta i zminimalizowana w przeglądarce Firefox http://i.imgur.com/a5i0aP3.png (menu kontekstowe na karcie, kliknij «zakładka wklej»). Kiedy demony wysyłają sygnał TERM, czekają chwilę, aż do wylogowania, i zapisują swoje dane. Zauważ, że w linku, który podałem wcześniej, kiedy wychodziłem ze skryptu, wywołuje start-stop-daemon i każe transmisji zatrzymać, tam możesz wkleić "killall nethogs" i to, co zawiera StopScript. Skrypt inicjujący w tym przypadku musiałbyś wywołać go jako root zamiast konkretnego użytkownika, ponieważ potrzebuje uprawnień.

        1.    Joaquin powiedział

          Dzięki za wskazówkę. Jak tylko będę miał czas, spróbuję!

  4.   Facundo powiedział

    świetnie, natknąłem się na tę wadę, ponieważ nawet jeśli masz szybkie łącze, jesteś zmuszony ograniczyć transmisję, gdy chcesz przeglądać, a tym samym "marnować" czas.
    Spróbuję, kiedy będę mógł. Pozdrawiam i dziękuję !!

    1.    Joaquin powiedział

      Dzięki Tobie! Mam nadzieję, że to ci pomoże!

      1.    Facundo powiedział

        Witam ponownie Joaquin. Widzę, że odpowiadasz na wszystkie komentarze, więc skorzystam z tego i zadam ci kilka początkujących pytań.
        Po pierwsze, skąd mam wiedzieć, czy mam zainstalowany skrypt „awk”? Używam Debiana 7.2.
        Po drugie, nie wiem, co zrobić z kodem wklejania. Muszę pobrać edytor tekstu i zapisać go w pliku o nazwie „bandwidth-controller.sh”, a następnie uruchomić go jako „./band-width-control.sh”. To jest ta część, w której jestem najbardziej zagubiony.
        Po trzecie: Kiedy mówisz, że uruchamiasz go jako root, czy konieczna jest zmiana z użytkownika na root, czy za pomocą sudo?

        Jeśli masz jakąś lekturę polecającą mnie na ten temat, doceniam to.
        Pozdrowienia!

  5.   giskard powiedział

    Dlatego zawsze odinstalowuję Transmisję i instaluję Potop. Cóż, za to i trochę więcej rzeczy, które oferuje mi Potop, a których ten drugi nie przynosi.

    1.    Joaquin powiedział

      Cześć, nie znam Potopu. Moim głównym problemem jest usługa internetowa. Dzięki temu wyciskam to w pełni.

  6.   panda powiedział

    Cześć. moje łącze jest również ograniczone, więc wypróbowałem ten skrypt. Ale to nie działa. wydaje się, że błąd występuje w poleceniu nethogs -t. zwraca błąd "Oczekiwanie na przybycie pierwszego pakietu (zobacz błąd 1019381 w sourceforge.net)" już wypróbował mint, archlinux i nic. Jakie polecenie ma zwrócić? Przypuszczam, że powinienem wydrukować zwykłym tekstem przepustowość używaną przez każdą aplikację. Czy znasz inny program umożliwiający słuchanie w sieci?

    1.    Joaquin powiedział

      Witam, jak się masz.
      To jest błąd Nethogs. Mnie też się wydaje, ale i tak działa.

      To, co robi Nethogs, to pokazuje procesy, które zużywają najwięcej przepustowości w czasie rzeczywistym. W skrypcie jego wynik jest zapisywany w pliku tekstowym „net.list”, dzięki czemu można go później przefiltrować.

      Skrypt działa tylko z Transmission (klient BitTorrent) i Firefox (przeglądarka internetowa). To, co robi, ogranicza przepustowość transmisji, gdy Firefox ładuje stronę internetową. Musisz zainstalować: Nethogs, Transmission, Transmission-remote i Firefox.

      Wszystko jest wyjaśnione w poście, więc nie wiem, na czym polega twój problem.

      PS: Napisz poprawnie i popraw pisownię. To komentarz, a nie wiadomość tekstowa.

      1.    panda powiedział

        skrypt nie działa dla mnie. drukuje ten komunikat o błędzie wiele razy. uruchom "nethogs -t" w terminalu, aby zobaczyć, co robi, ale nic nie drukuje, tylko błąd. na moim komputerze to nie działa. Wyobrażam sobie, że powinien wydrukować coś podobnego do tego, co drukuje po uruchomieniu bez -t, pokazując procesy i przepustowość. ale w moim przypadku nic z tego nie drukuje. z której dystrybucji korzystałeś przy tworzeniu scenariusza?

        1.    Joaquin powiedział

          Jeśli przyjrzysz się uważnie, post zawiera całe używane oprogramowanie i jego wersje. Nie wiem, skąd ten błąd, ale pojawia się on za każdym razem, gdy uruchamiany jest "nethogs -t". W scenariuszu będzie się to działo co 2 ″.

          Może się zdarzyć, że po uruchomieniu nethogs nie ma żadnego procesu korzystającego z sieci i dlatego nie otrzymasz żadnych danych wyjściowych.

          Skrypt musi być uruchomiony jako root, ponieważ nethogs potrzebuje tego użytkownika do działania.

          teraz przypomniałem sobie coś ważnego i wiem, dlaczego u Ciebie to nie działa:

          MUSISZ EDYTOWAĆ skrypt i zmienić nazwę zwykłego użytkownika. W scenariuszu nazywa się to „joaquin”. Musisz zmienić to na nazwę swojego użytkownika.

          Przepraszam, nie zdawałem sobie z tego sprawy, powinienem był umieścić nazwę w zmiennej. Chodzi o to, że nie myślałem o tym, aby uczynić to tak ogólnym, po prostu chciałem ci to pokazać, abyś mógł to zobaczyć, a kto chce, mógł mieć pomysły, jak to zrobić. Nie robiłem tego z zamiarem, żeby to zadziałało na jakimkolwiek komputerze, to wymaga czasu i nie wiem jak programować, niektóre rzeczy mi się przytrafiają.

          Powodzenia, znowu o wszystko zapytaj. Przeczytaj jeszcze raz post i komentarze do scenariusza.

  7.   Facundo powiedział

    Cześć Joaquín, powiedz mi co następuje:

    zdalne sterowanie: (http://localhost:9091/transmission/rpc/) Nie można połączyć się z serwerem
    ioctl nie powiodło się podczas ustanawiania lokalnego adresu IP dla wybranego urządzenia eth0. Możesz określić urządzenie w linii poleceń.

    jakieś pomysły?? dzięki!

    1.    Joaquin powiedział

      Witam, jak się masz.
      Przepraszam, ale nie mam pojęcia 😀
      Z tego, co rozumiem, błąd mówi, że jest to problem z ioctl, ale nie wiem, co to jest.

      Może mógłbyś spróbować zatrzymać skrypt i sprawdzić, czy zdalna transmisja działa z niektórymi opcjami (przeczytaj jego stronę podręcznika man poleceniem "man").