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

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

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

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

Я маю величезне задоволення, і тому я вирішив поділитися з вами своїм маленьким сценарієм, щоб ви могли його використовувати та вдосконалювати. Я планую ліцензувати його під 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 /ініц.д (Я навіть бачив кілька сценаріїв, які там є скелет, але я їх не розумію). Якщо хтось зможе мені допомогти, буду дуже вдячний.

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

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

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


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

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

*

*

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

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

    О! Цікаво 😀

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

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

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

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

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

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

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

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

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

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

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

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

      Спасибо!

  2.   cookie - сказав він

    Цікаво, що я використовую 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").