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

Привет всем. Это мой второй пост. Обычно я не пишу посты, если у меня нет чего-то хорошего, чем я могу поделиться, и на этот раз у меня есть то, что наверняка заинтересует многих.

Несколько месяцев назад я думал о создании скрипта для ограничения пропускной способности приложений, но у меня были некоторые проблемы и ошибки, которые усложняли мне задачу, поэтому я выразил свои сомнения в форум de <º FromLinux на случай, если у кого-то возникла идея.

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

Я очень доволен, поэтому решил поделиться с вами своим маленьким скриптом, чтобы вы могли его использовать и улучшать. Я планирую лицензировать его по GPLv3, но это мой первый проект, поэтому я не совсем уверен, как это сделать (мне нужен совет от того, кто делал это раньше).

Что ж, теперь я объясню, в чем была моя потребность и что я сделал для решения проблемы.

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

Когда я подключаюсь к Интернету, я активирую ограничения по времени загрузки и скачивания передачи и жду загрузки Firefox, затем снова запускаю торренты. Как вы увидите, сделать это пару раз утомительно. Не говоря уже о том, что иногда я просто приостанавливаю все торренты, а затем забываю их снова включить, что приводит к потере драгоценного времени на загрузку / скачивание торрентов.

Решение
Для решения этой проблемы я решил создать сценарий Bash, который в основном выполняет следующие действия:

1. Убедитесь, что передача работает и торренты не приостановлены. Если да, то снова включите торренты.

2. Убедитесь, что Firefox запущен. Затем он получает отправленные и полученные КБ / с и сохраняет их в файл.

3. Если количество загружаемых или загружаемых браузером КБ / с превышает контрольный диапазон, параметры загрузки / выгрузки передачи изменяются.

Это позволяет при желании получить доступ к веб-странице, когда браузер отправляет запрос, загрузка файла передачи ограничена, а когда данные страницы получены, загрузка ограничена. Это отлично работает при одновременном доступе к нескольким страницам, и результаты фактически такие же, как и при отключенной передаче.

Большим преимуществом является то, что он полностью автоматический и не требует моего вмешательства.

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

Requisitos
Для правильной работы необходимо наличие приложения «nethogs.

В этом случае, поскольку сценарий работает с Firefox и Transmission, необходимо, чтобы эти приложения были установлены, в дополнение к "transfer-remote", который изменяет значения загрузки и скачивания торрентов. Я также использую в скрипте "awk". Я упоминаю об этом, потому что не знаю, во всех ли дистрибутивах он установлен.

Программное обеспечение используется
Список приложений, которые использует скрипт, и система, в которой он работает.

• Debian GNU / Linux 6.0.8
• Linux 2.6.32-5-686
• Firefox 24.0
• Трансмиссия 2.03 (11030)
• Nethogs 0.7.0

Выполнение
Он должен запускаться как root, потому что nethogs может быть запущен только с этим пользователем, но дистанционная передача он выполняется обычным пользователем с помощью команды су.

Скрипт использует внутреннюю команду Bash ловушка С помощью которого можно восстановить значения по умолчанию для передачи / разгрузки, когда она остановлена ​​с помощью сигналов SIGINT (CTRL + c) или SIGTERM.

Я до сих пор не знаю, как это сделать, чтобы запускать его при запуске и останавливать, когда я выключаю или перезагружаю компьютер. Я думал поместить ссылку в файл /etc/rc.local но я не знаю, сработает ли это, и я действительно не понимаю, как работает / etc /init.d (Я видел некоторые скрипты, которые там есть, даже скелет, но я их не понимаю). Если кто может мне помочь, буду очень признателен.

 

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

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

Вы можете скачать скрипт в макаронные изделия. Спасибо за прочтение!!


Содержание статьи соответствует нашим принципам редакционная этика. Чтобы сообщить об ошибке, нажмите здесь.

23 комментариев, оставьте свой

Оставьте свой комментарий

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

*

*

  1. Ответственный за данные: Мигель Анхель Гатон
  2. Назначение данных: контроль спама, управление комментариями.
  3. Легитимация: ваше согласие
  4. Передача данных: данные не будут переданы третьим лицам, кроме как по закону.
  5. Хранение данных: база данных, размещенная в Occentus Networks (ЕС)
  6. Права: в любое время вы можете ограничить, восстановить и удалить свою информацию.

  1.   Elav сказал

    Ой! Интересно 😀

    1.    eliotime3000 сказал

      В левом нижнем углу у вас есть возможность ограничить полосу пропускания, которую Transmission потребляет как при выгрузке, так и при скачивании. С трансмиссией у меня не было никаких проблем.

      1.    печенье сказал

        Но это происходит автоматически, и есть еще Transmission без графического интерфейса, так что у вас может не быть этой функции под рукой.

      2.    Хоакин сказал

        Привет, как ты.
        Да, я это уже знаю. Но именно этого я не хочу делать.
        У меня очень плохой тарифный план на доступ в Интернет (512 КБ, и он лучший в моем районе).

        Со своим сценарием я не беспокоюсь о том, чтобы делать все вручную. Представьте, что вы открываете страницу в браузере, а Transmission в этот момент занимает всю полосу пропускания, поэтому загрузка страницы занимает некоторое время (самое большее 1 ′, но это раздражает). Я покончил с «активацией временных ограничений» каждые две минуты. Это происходит автоматически и почти мгновенно (он проверяет КБ, отправленные и полученные Firefox каждые 5 секунд).

        На самом деле в моем случае с такой скоростью интернета это превосходно. Также я не знаю другого приложения, которое бы это делало, иначе оно бы этого не сделало. Те, что я видел, только ограничивают пропускную способность, но не автоматически.

        Надеюсь, я был ясен. Спасибо за чтение!

        1.    Хоакин сказал

          Простите, я ошибся. Их размер не 512 КБ, а скорее Кбит. (То есть 1/2 «Мега»). Максимум, который я могу загрузить, составляет 75 КБ / с и 50 КБ / с для загрузки. Что при инете нормально, иначе нормально 48 и 23.

    2.    Хоакин сказал

      Спасибо!

  2.   печенье сказал

    Интересно, что я использую qBittorrent и использую переключатель для лимитов.

    Пост красиво смотрится в этих цветах 😉

    1.    Хоакин сказал

      Спасибо за цвета. Я не очень хорош в этом, он кажется очень длинным и однообразным с таким большим количеством текста.

  3.   Хорхе сказал

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

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

    1.    Хоакин сказал

      Привет!
      Посмотрим, понял ли я: это для запуска передачи при запуске и остановки при выключении или перезапуске. С этим у меня проблем нет, так как он всегда запускается сам и начинает загрузку (я добавил его в приложения при запуске в Xfce).

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

      И почему меня это беспокоит? Скрипт создает файл в / tmp и контролирует скорость передачи. Если я запускаю его в терминале и внезапно останавливаю (например, с помощью CTRL + c), скрипт перед закрытием восстанавливает скорости по умолчанию (в случае необходимости), а затем останавливает Nethogs и удаляет файл из / tmp. Я постарался сделать его как можно более «профессиональным», чтобы не оставались незакрепленные файлы или фоновые процессы.

      Насчет того, что вы сказали, я не понял, что такое «вкладка живого приложения».

      1.    Хорхе сказал

        Вкладка приложения - это постоянная вкладка, она всегда открыта и свернута в firefox. http://i.imgur.com/a5i0aP3.png (контекстное меню на вкладке, нажмите «вставить вкладку»). Когда демоны отправляют сигнал TERM, они ждут некоторое время, пока не закроют сеанс, и сохраняют свои данные. Обратите внимание, что в приведенной мной ранее ссылке при выходе из сценария вызывается start-stop-daemon и указывается остановка передачи, туда вы можете вставить «killall nethogs» и то, что содержится в StopScript. В этом случае сценарий инициализации должен вызывать его как root, а не как конкретный пользователь, так как ему нужны привилегии.

        1.    Хоакин сказал

          Что ж, спасибо за подсказку. Как только у меня будет время, попробую!

  4.   Факундо сказал

    отлично, я столкнулся с этим неудобством, поскольку даже при быстром подключении вы вынуждены ограничивать передачу, пока хотите просматривать, и, таким образом, «тратить» время.
    Я попробую, когда смогу. Привет и спасибо !!

    1.    Хоакин сказал

      Спасибо тебе! Надеюсь, это поможет вам!

      1.    Факундо сказал

        И снова здравствуйте, Хоакин. Я вижу, что вы отвечаете на все комментарии, поэтому я воспользуюсь этим и задам вам пару вопросов для новичков.
        Во-первых, как мне узнать, установлен ли у меня сценарий "awk"? Я использую Debian 7.2.
        Во-вторых, я не знаю, что делать с кодом вставки. Мне нужно взять текстовый редактор и сохранить его в файл с именем «bandwidth-controller.sh», а затем запустить его как «./band-width-control.sh». Это та часть, где я больше всего потерялся.
        В-третьих: когда вы говорите запустить его как root, нужно ли переходить от пользователя к root или с помощью sudo?

        Если у вас есть что порекомендовать мне по этому поводу, я ценю это.
        Привет!

  5.   Жискар сказал

    Вот почему я всегда удаляю Transmission и устанавливаю Deluge. Ну, за это и еще кое-что, что предлагает мне Всемирный потоп, чего не приносит другой.

    1.    Хоакин сказал

      Привет, я не знаю Потопа. Моя основная проблема - это интернет-сервис. На этом выжимаю по полной.

  6.   панда сказал

    Привет. Моя пропускная способность также ограничена, поэтому я попробовал этот сценарий. Но это не работает. похоже, ошибка в команде nethogs -t. возвращает ошибку «Ожидание прибытия первого пакета (см. ошибку sourceforge.net 1019381)» Я пробовал mint, archlinux и ничего. Что эта команда должна вернуть? Полагаю, мне следует распечатать обычным текстом пропускную способность, используемую каждым приложением. Вы знаете другую программу, которая позволяет слушать сеть?

    1.    Хоакин сказал

      Привет, как ты.
      Это ошибка Nethogs. Мне это тоже кажется, но все равно работает.

      Nethogs показывает процессы, которые потребляют наибольшую пропускную способность, в реальном времени. В сценарии его вывод сохраняется в текстовом файле net.list, чтобы его можно было отфильтровать позже.

      Скрипт работает только с Transmission (клиент BitTorrent) и Firefox (веб-браузер). Он ограничивает пропускную способность Transmission, когда 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, но я не знаю, что это такое.

      Может быть, вы могли бы попробовать остановить скрипт и посмотреть, работает ли передача-remote с некоторыми из его опций (прочтите его справочную страницу с помощью команды "man").