Script Bash: Автоматично контролюйте пропускну здатність передачі

Усім привіт. Це мій другий допис. Зазвичай я не пишу дописи, якщо у мене немає чогось хорошого, щоб поділитися, і цього разу у мене є те, що, безсумнівно, зацікавить багатьох.

Кілька місяців тому я думав створити сценарій для обмеження пропускної здатності програм, але у мене були деякі проблеми та помилки, які ускладнили мене, тому я висловив сумнів у форум de <º FromLinux на випадок, якщо хтось мав ідею.

Тож я залишив це на деякий час і одного дня вирішив відновити сценарій. Я багато тестував, багато читав про баш, і у вільний час боліли голови, але я це робив !!

Я маю величезне задоволення, і тому я вирішив поділитися з вами своїм маленьким сценарієм, щоб ви могли його використовувати та вдосконалювати. Я планую ліцензувати його під GPLv3, але це мій перший проект, тому я не зовсім впевнений, як це зробити (мені потрібна порада від того, хто це робив раніше).

Ну, зараз я поясни, якою була моя потреба і що я зробив для вирішення проблеми.

Ситуація
У мене є план в Інтернеті на 512 Кб, тому я використовую передача як клієнт BitTorrent для завантаження великих файлів (наприклад, LibreOffice та деяких дистрибутивів GNU / Linux). З такою швидкістю завантаження займають багато часу, і проблема полягає у використанні веб-браузера Firefox: завантаження триває довго.

Коли я підключаюся до Інтернету, я активую обмеження часу завантаження та завантаження та чекаю завантаження Firefox, а потім знову запускаю торренти. Як ви побачите, робити це пару раз нудно. Не кажучи вже про те, що іноді я відразу призупиняю всі торренти, а потім забуваю їх увімкнути знову, що призводить до витраченого дорогоцінного часу на завантаження / завантаження торрентів.

Рішення
Для цієї проблеми я вирішив створити сценарій у Bash, який в основному робить наступне:

1. Переконайтесь, що передача працює, а торрент не призупинено. Якщо так, увімкніть торренти знову.

2. Переконайтеся, що Firefox працює. Потім він отримує відправлені та отримані ними КБ / с і зберігає їх у файлі.

3. Якщо завантаження / завантаження браузера в КБ / с перевищує контрольний діапазон, налаштування передачі / завантаження передачі змінюються.

Це дозволяє, що при бажанні отримати доступ до веб-сторінки, коли браузер надсилає запит, завантаження файлу передачі обмежується, а коли дані сторінки отримуються, завантаження обмежується. Це чудово працює при одночасному доступі до кількох сторінок, а результати насправді такі ж, як і при відключеній передачі.

Велика перевага полягає в тому, що він повністю автоматичний і не вимагає мого втручання.

Сценарій
Незважаючи на те, що він може використовуватися для контролю споживання смуги пропускання будь-якого додатка, на даний момент він написаний лише для вирішення дуже конкретної проблеми. Але зробити модифікації не дуже складно.

Вимога
Для його нормальної роботи необхідно мати додаток «сіть-собаки».

У цьому випадку, оскільки сценарій працює з Firefox та Transmission, необхідно встановити ці додатки, крім "віддаленої передачі", що змінює значення завантаження та завантаження торрентів. Я також використовую "awk" у сценарії. Я згадую про це, бо не знаю, чи встановлено це на всіх дистрибутивах.

Використане програмне забезпечення
Список програм, які використовує сценарій, та системи, в якій він працює.

• Debian GNU / Linux 6.0.8
• Linux 2.6.32-5-686
• Firefox 24.0
• Коробка передач 2.03 (11030)
• Nethogs 0.7.0

Виконання
Його потрібно запускати як root, оскільки сіть-собаки можна запускати лише з цим користувачем, але передача-дистанційна він виконується із звичайним користувачем за допомогою команди його.

Сценарій використовує внутрішню команду Bash пастка За допомогою якого можна відновити значення навантаження / розвантаження за замовчуванням, коли воно зупинене за допомогою сигналів SIGINT (CTRL + c) або SIGTERM.

Досі не знаю, як це зробити, щоб запустити його під час запуску та зупинити, коли я вимикаю або перезавантажую комп'ютер. Я думав вставити посилання у файл /etc/rc.local але я не знаю, чи це спрацює, і я насправді не розумію, як працює / etc /init.d (Я навіть бачив кілька сценаріїв, які там є скелет, але я їх не розумію). Якщо хтось зможе мені допомогти, буду дуже вдячний.

 

Ну люди, це все. Я сподіваюся, що мій невеликий внесок буде вам корисний, і ви зможете його покращити, якщо забажаєте. Я з радістю прочитаю ваші думки та рекомендації, а також пропозиції, якщо у файлі виникнуть проблеми із захистом (я не програміст, час від часу роблю лише кілька речей).

Я знаю, що з деякими виправленнями це може стати чудовим додатком у майбутньому, тому що я не знаю жодної програми, яка робить те саме. Наприклад, мені здається, що у мене міг бути графічний інтерфейс зенітність і мати можливість вибирати програми, яким ми хочемо визначити пріоритет у використанні пропускної здатності (веб-браузер, менеджер оновлень, передача файлів тощо) та різні контрольні значення. Так, це дещо амбітно, але цілком корисно.

Ви можете завантажити сценарій в вставляти. Велике спасибі за читання !!


Зміст статті відповідає нашим принципам редакційна етика. Щоб повідомити про помилку, натисніть тут.

23 коментарі, залиште свій

Залиште свій коментар

Ваша електронна адреса не буде опублікований. Обов'язкові для заповнення поля позначені *

*

*

  1. Відповідальний за дані: Мігель Анхель Гатон
  2. Призначення даних: Контроль спаму, управління коментарями.
  3. Легітимація: Ваша згода
  4. Передача даних: Дані не передаватимуться третім особам, за винятком юридичних зобов’язань.
  5. Зберігання даних: База даних, розміщена в мережі Occentus Networks (ЄС)
  6. Права: Ви можете будь-коли обмежити, відновити та видалити свою інформацію.

  1.   елав - сказав він

    О! Цікаво 😀

    1.    eliotime3000 - сказав він

      У нижньому лівому куті ви маєте можливість обмежити пропускну здатність, яку передача використовує як при завантаженні, так і при завантаженні. З трансмісією у мене не було жодних проблем.

      1.    печиво - сказав він

        Але це автоматично, і існує також передача без графічного інтерфейсу, тому у вас може бути не така функція під рукою.

      2.    Хоакін - сказав він

        Привіт як ти.
        Так, я це вже знаю. Але саме цього я не хочу робити.
        У мене дуже поганий план в Інтернеті (512 КБ, і це найкращий варіант у моєму районі).

        З моїм сценарієм я не турбуюся про те, щоб робити все вручну. Уявіть, що ви відкриваєте сторінку в браузері, і Transmission займає всю пропускну здатність на той момент, тому сторінка завантажується (не більше 1 ′, але це дратує). Я закінчую "активувати обмеження часу" кожні дві хвилини. Це автоматично і майже миттєво (перевіряє KB, надіслану та отриману Firefox кожні 5 секунд).

        Насправді в моєму випадку з такою швидкістю Інтернету це чудово. Також я не знаю жодної програми, яка б це робила, інакше вона б цього не зробила. Ті, які я бачив, обмежують лише пропускну здатність, але не автоматично.

        Сподіваюся, мені було ясно. Дякую за читання!

        1.    Хоакін - сказав він

          Вибачте, я помилився. Вони не мають розміру 512 КБ, швидше це Кбіти. (Тобто 1/2 "Мега"). Максимум, що я можу завантажити, - 75 КБ / с і 50 КБ / с. Це тоді, коли з Інтернетом все гаразд, інакше нормальним є 48 і 23.

    2.    Хоакін - сказав він

      Спасибо!

  2.   печиво - сказав він

    Цікаво, що я використовую qBittorrent і використовую перемикач для обмежень.

    Публікація виглядає гарно з цими кольорами 😉

    1.    Хоакін - сказав він

      Дякую за кольори. Мені це не дуже вдало, це здається дуже довгим і одноманітним із стільки тексту.

  3.   Хорхе - сказав він

    Особисто я використовую передачу-демон і firefox з активною вкладкою програми, тому я не ходжу із зовнішніми програмами і не забуваю продовжувати торренти або активовану черепаху (і я можу керувати цим зі свого телефону). Для запуску служби додається користувач (наприклад: adduser –disabled-password nethogs), у /etc/init.d створюється текстовий файл для демона з ім'ям (наприклад: nethogs-daemon), а потім у debian це введіть "update-rc.d nethogs-daemon за замовчуванням", щоб він запускався сам.

    Текстовий файл - це також скрипт bash, в який ви можете об'єднати свій сценарій.
    Подивіться, чи може це допомогти вам, його можна використовувати для запуску демона передачі, можна використовувати для запуску мережевих собак https://trac.transmissionbt.com/wiki/Scripts/initd

    1.    Хоакін - сказав він

      Здрастуйте!
      Давайте подивимось, чи я розумію: це для запуску передачі під час запуску та зупинки її під час вимкнення чи перезапуску. З цим я не маю проблем, оскільки він завжди запускається сам і починає завантажуватися (я додав його до програм під час запуску в Xfce).

      Моя проблема полягає в тому, що якщо при розміщенні сценарію в rc.local або init.d я не знаю, як комп'ютер зупиняє сценарій. Тобто, очевидно, що при вимкненні / перезавантаженні ПК усі процеси припиняються (а разом з ними і передача, і Nethogs), але я не знаю, що станеться з моїм сценарієм.

      І чому це мене турбує? Сценарій створює файл у / tmp і контролює швидкість передачі. Якщо я запускаю його в терміналі і раптом зупиняю (наприклад, за допомогою CTRL + c), сценарій перед закриттям відновлює швидкості за замовчуванням (у разі необхідності), а потім зупиняє Nethogs і видаляє файл з / tmp. Я намагався зробити його максимально "професійним", щоб він не залишав вільних файлів або фонових процесів.

      Щодо того, що ви сказали, я не зрозумів, що таке "активна вкладка програми".

      1.    Хорхе - сказав він

        Вкладка програми - це постійна вкладка, вона завжди відкрита та зведена до мінімуму у Firefox http://i.imgur.com/a5i0aP3.png (контекстне меню на вкладці, клацніть на «вставити вкладку»). Коли демони надсилають сигнал TERM, вони чекають деякий час, доки вони не закриють сесію, і зберігають свої дані. Зверніть увагу, що у посиланні, яке я давав раніше, коли виходив із скрипта, викликає start-stop-daemon і повідомляє зупинку передачі, там ви можете вставити "killall nethogs" і те, що він містить StopScript. Сценарій init в цьому випадку вам доведеться викликати як root, а не конкретного користувача, оскільки йому потрібні привілеї.

        1.    Хоакін - сказав він

          Ну спасибі за підказку. Як тільки встигаю, спробую!

  4.   факундо - сказав він

    чудово, я зіткнувся з цим недоліком, оскільки навіть якщо у вас швидке з'єднання, ви змушені обмежити передачу, поки хочете займатися серфінгом і тим самим "витратити час".
    Я збираюся спробувати, коли зможу. Вітаю та дякую !!

    1.    Хоакін - сказав він

      Дякую тобі! Сподіваюся, це може вам допомогти!

      1.    Факундо - сказав він

        Знову привіт Хоакін. Я бачу, що ви піклуєтесь про відповідь на всі коментарі, тому я збираюся скористатися цим, і я задам вам пару питань новачка.
        По-перше, як я можу дізнатись, чи встановлений у мене сценарій "awk"? Я використовую Debian 7.2.
        По-друге, я не знаю, що робити з кодом вставки. Мені потрібно взяти текстовий редактор і зберегти його у файл, який називається "bandwidth-controller.sh", а потім запустити як "./band-width-control.sh". Це та частина, де я найбільше загубився.
        По-третє: Коли ви говорите, щоб запустити його як root, чи потрібно переходити від користувача до root або цього достатньо з sudo?

        Якщо у вас є читання, щоб порекомендувати мені цю тему, я ціную це.
        Привіт!

  5.   Гіскард - сказав він

    Ось чому я завжди видаляю передачу та встановлюю Deluge. Ну, за це та ще трохи речей, які пропонує мені Потоп, а інші не приносять.

    1.    Хоакін - сказав він

      Привіт, я не знаю Потопу. Моя головна проблема - Інтернет-сервіс. Цим я стискаю його на повну.

  6.   панда - сказав він

    Привіт. моя пропускна здатність також обмежена, тому я спробував цей сценарій. Але це не працює. здається, помилка в команді nethogs -t. він повертає помилку "Чекаючи прибуття першого пакета (див. помилку sourceforge.net 1019381)", і я спробував mint, archlinux і нічого. Що ця команда повинна повернути? Думаю, мені слід надрукувати простим текстом пропускну здатність, яку використовує кожна програма. Чи знаєте ви ще одну програму, яка дозволяє слухати мережу?

    1.    Хоакін - сказав він

      Привіт як ти.
      Це помилка Nethogs. Це здається мені також, але все одно працює.

      Що робить Nethogs, це показує процеси, які споживають найбільшу пропускну здатність, у реальному часі. У сценарії його вихідні дані зберігаються у текстовому файлі "net.list", щоб потім його можна було відфільтрувати.

      Сценарій працює лише з Transmission (клієнт BitTorrent) та Firefox (веб-браузер). Він обмежує пропускну здатність передачі, коли Firefox завантажує веб-сторінку. Вам потрібно встановити: Nethogs, Transmission, Transmission-remote та Firefox.

      Це все пояснюється у дописі, тому я не знаю, в чому ваша проблема.

      PS: Будь ласка, пишіть правильно та вдосконалюйте свій правопис. Це коментар, а не текстове повідомлення.

      1.    панда - сказав він

        сценарій у мене не працює. друкує це повідомлення про помилку багато разів. запустіть "nethogs -t" у терміналі, щоб побачити, що він робить, але він нічого не друкує, лише помилка. на моєму ПК це не працює. Я думаю, що він повинен надрукувати щось подібне до того, що друкується при виконанні без -t, показуючи процеси та пропускну здатність. але в моєму випадку це нічого не друкує. який дистрибутив ви використовували для розробки сценарію?

        1.    Хоакін - сказав він

          Якщо ви уважно придивитесь, публікація містить усе використовуване програмне забезпечення та його версії. Я не знаю, чому помилка, але вона з'являється мені кожного разу, коли запускається "nethogs -t". У сценарії це відбуватиметься кожні 2 ″.

          Можливо, коли ви запускаєте nethogs, жоден процес не використовує мережу, і тому ви не отримуєте жодного результату.

          Сценарій повинен бути запущений як root, оскільки nethogs потребує цього користувача для роботи.

          тепер я згадав щось важливе і знаю, чому у вас це не працює:

          ВИ ПОВИННІ РЕДАКТУВАТИ сценарій та змінити ім'я звичайного користувача. У сценарії це називається "хоакін". Ви повинні змінити його на своє ім’я користувача.

          На жаль, я цього не зрозумів, я мав би вказати ім'я у змінну. Що трапляється, так це те, що я не думав робити це таким загальним, я просто хотів показати це вам, щоб ви це побачили, а ті, хто хоче, могли отримати ідеї, як це зробити. Я робив це не з наміром, що це буде працювати на будь-якому комп’ютері, це займає час, і я не знаю, як програмувати, деякі речі трапляються зі мною.

          Удачі, будь-що запитуйте ще раз. І, будь ласка, ще раз прочитайте пост та коментарі до сценарію.

  7.   Факундо - сказав він

    Привіт Хоакін, скажи мені наступне:

    віддалена передача: (http://localhost:9091/transmission/rpc/) Не вдалося підключитися до сервера
    ioctl не вдалося встановити локальний IP для вибраного пристрою eth0. Ви можете вказати пристрій у командному рядку.

    будь-які ідеї ?? Дякую!

    1.    Хоакін - сказав він

      Привіт як ти.
      Вибачте, але я не маю уявлення 😀
      Наскільки я розумію, про помилку йдеться, це проблема з ioctl, але я не знаю, що це таке.

      Можливо, ви можете спробувати зупинити сценарій і перевірити, чи працює віддалений передавач з деякими його параметрами (прочитайте його сторінку довідки за допомогою команди "man").