スクリプトバッシュ:送信帯域幅を自動的に制御する

みなさん、こんにちは。 これは私のXNUMX番目の投稿です。 共有するのに良いものがない限り、私は通常投稿を書きません。今回はきっと多くの人が興味を持ってくれるものがあります。

数ヶ月前、アプリケーションの帯域幅を制限するスクリプトを作成することを考えていましたが、いくつかの問題やエラーがあり、それが困難だったため、疑問を投げかけました。 フォーラム de <º DesdeLinux 誰かがアイデアを持っていた場合に備えて。

それでしばらく放置し、ある日スクリプトを再開することにしました。 たくさんのテストをしたり、bashについてたくさん読んだり、暇なときに頭痛がしたりしましたが、やりました!

私は非常に満足しているので、あなたがそれを使用して改善できるように、私の小さなスクリプトをあなたと共有することにしました。 GPLv3でライセンスを取得する予定ですが、これは私の最初のプロジェクトであるため、これを行う方法がよくわかりません(以前に行ったことのある人からのアドバイスが必要です)。

さて、今、私は私の必要性が何であったか、そして私が問題を解決するために何をしたかを説明します。

状況
私は512Kbsのインターネットプランを持っているので、 送信 大きなファイル(LibreOfficeや一部のGNU / Linuxディストリビューションなど)をダウンロードするためのBitTorrentクライアントとして。 その速度ではダウンロードに時間がかかり、問題はWebブラウザを使用するときです Firefoxの:読み込みに時間がかかります。

インターネットに接続したら、送信のアップロードとダウンロードの時間制限を有効にし、Firefoxが読み込まれるのを待ってから、トレントを再開します。 ご覧のとおり、これを数回行うのは面倒です。 言うまでもなく、私はすべてのトレントを完全に一時停止してから、再びオンにするのを忘れてしまい、トレントのアップロード/ダウンロードに貴重な時間を浪費することになります。

ソリューション
この問題のために、基本的に次のことを行うBashスクリプトを作成することにしました。

1. Transmissionが実行されており、トレントが一時停止されていないことを確認してください。 その場合は、トレントをオンに戻します。

2. Firefoxが実行されていることを確認します。 次に、KB / sを送受信し、ファイルに保存します。

3. ブラウザのアップロード/ダウンロードKB / sが基準範囲を超えると、送信のアップロード/ダウンロード設定が変更されます。

これにより、Webページにアクセスするときに、ブラウザーが要求を送信するときに送信ファイルのアップロードが制限され、ページデータを受信するときにダウンロードが制限されます。 これは、一度に複数のページにアクセスする場合にうまく機能し、結果は実際には送信を無効にした場合と同じです。

大きな利点は、それが完全に自動化されており、私の介入を必要としないことです。

スクリプト
あらゆるアプリケーションの帯域幅消費を制御するために使用できますが、現時点では、非常に特定の問題を解決するためにのみ作成されています。 しかし、変更を加えることはそれほど難しくありません。

<font style="vertical-align: inherit;"><font style="vertical-align: inherit;">要件
それが正しく機能するためには、アプリケーションが必要です«ネットホッグ'。

この場合、スクリプトはFirefoxとTransmissionで動作するため、トレントのアップロードとダウンロードの値を変更する「transmission-remote」に加えて、これらのアプリケーションをインストールする必要があります。 スクリプト「awk」でも使用します。 すべてのディストリビューションにインストールされているかどうかわからないので、言及します。

使用ソフトウェア
スクリプトが使用するアプリケーションとスクリプトが機能するシステムのリスト。

•DebianGNU / Linux 6.0.8
•Linux2.6.32-5-686
•Firefox24.0
•トランスミッション2.03(11030)
•Nethogs0.7.0

実行
ルートとして実行する必要があるため ネットホッグ そのユーザーでのみ実行できますが、 送信-リモート コマンドを使用して通常のユーザーで実行されます スー。

スクリプトは内部Bashコマンドを使用します トラップ SIGINT(CTRL + c)またはSIGTERM信号によって停止されたときに、トランスミッションのロード/アンロードのデフォルト値を復元することができます。

起動時に実行し、コンピュータをシャットダウンまたは再起動したときに停止する方法がまだわかりません。 ファイルにリンクを張ろうと思っていました /etc/rc.local しかし、それが機能するかどうかはわかりません。また、/ etc /がどのように機能するのかよくわかりません。初期化 (私はそこにあるいくつかのスクリプトを見ました スケルトン、しかし私はそれらを理解していません)。 誰かが私を助けてくれるなら、私はとても感謝します。

皆さん、それだけです。 私の小さな貢献があなたに役立つこと、そしてあなたが望むならそれを改善できることを願っています。 ファイルにセキュリティ上の問題がある場合に備えて、あなたの意見や推奨事項、および提案を喜んで読みます(私はプログラマーではないので、時々いくつかのことをします)。

私は同じことをするプログラムを知らないので、いくつかの修正でそれが将来素晴らしいアプリケーションになる可能性があることを知っています。 たとえば、私はグラフィカルインターフェイスを持つことができると思います 天頂 帯域幅の使用で優先したいアプリケーション(Webブラウザー、更新マネージャー、ファイル転送など)とさまざまな参照値を選択できるようにします。 はい、それはやや野心的ですが、非常に便利です。

スクリプトは、でダウンロードできます。 paste。 読んでくれてありがとう!


コメントを残す

あなたのメールアドレスが公開されることはありません。 必須フィールドには付いています *

*

*

  1. データの責任者:MiguelÁngelGatón
  2. データの目的:SPAMの制御、コメント管理。
  3. 正当化:あなたの同意
  4. データの伝達:法的義務がある場合を除き、データが第三者に伝達されることはありません。
  5. データストレージ:Occentus Networks(EU)がホストするデータベース
  6. 権利:いつでも情報を制限、回復、削除できます。

  1.   エラヴ

    ああ! 興味深い😀

    1.    エリオタイム3000

      左下隅には、Transmissionがアップロードとダウンロードの両方で消費する帯域幅を制限するオプションがあります。 トランスミッションに関しては、問題はありませんでした。

      1.    クッキー

        ただし、これは自動であり、グラフィカルインターフェイスのないTransmissionもあるため、その機能をすぐに使用できない場合があります。

      2.    ホアキン

        こんにちは、元気ですか。
        はい、私はすでにそれを知っています。 しかし、それはまさに私がやりたくないことです。
        私のインターネットプランは非常に貧弱です(512KBで、私の地域で最高です)。

        私のスクリプトでは、すべてを手作業で行う必要はありません。 ブラウザでページを開き、その時点でTransmissionがすべての帯域幅を占有しているため、ページの読み込みに時間がかかると想像してください(最大で1フィートですが、苛立たしいです)。 5分ごとに「制限時間の有効化」が完了しました。 これは自動でほぼ瞬時に行われます(FirefoxがXNUMX秒ごとに送受信したKBをチェックします)。

        本当に私の場合、そのインターネット速度で、それは素晴らしいです。 また、私はこれを行う別のアプリケーションを知りません。そうでなければ、それは行われなかったでしょう。 私が見たものは帯域幅を制限するだけで、自動的には制限しません。

        私は明確だったと思います。 読んでくれてありがとう!

        1.    ホアキン

          ごめんなさい、私が悪かった。 それらは512KBではなく、キロビットです。 (つまり、1/2「メガ」)。 ダウンロードできる最大数は75KB /秒と50KB /秒のアップロードです。 それはインターネットが問題ないときです、さもなければ通常は48と23です。

    2.    ホアキン

      ありがとうございます!

  2.   クッキー

    興味深いことに、私はqBittorrentを使用し、制限にスイッチを使用しています。

    投稿はそれらの色で見栄えがします😉

    1.    ホアキン

      色をありがとう。 私はそれがあまり得意ではありません、それは非常に長くて単調で、たくさんのテキストがあるようです。

  3.   ホルヘ

    個人的には、ライブアプリケーションタブで伝送デーモンとFirefoxを使用しているので、外部プログラムを持って歩いたり、急流やアクティブ化されたカメを続けるのを忘れたりすることはありません(そして携帯電話から制御できます)。 サービスを開始するために、ユーザーが追加され(例:adduser –disabled-password nethogs)、デーモンのテキストファイルが/etc/init.dに名前(例:nethogs-daemon)で作成され、debianでは次のようになります。 「update-rc.dnethogs-daemondefaults」と入力して、自動的に起動するようにします。

    テキストファイルもbashスクリプトであり、スクリプトをマージできます。
    これがあなたを助けることができるかどうか見てください、それは送信デーモンを開始するために使用することができます、それはnethogsを開始するために使用することができます https://trac.transmissionbt.com/wiki/Scripts/initd

    1.    ホアキン

      こんにちは!
      私が理解しているかどうかを確認してください。これは、起動時にTransmissionを開始し、シャットダウンまたは再起動時に停止することです。 それは常にそれ自体で起動してダウンロードを開始するので問題はありません(Xfceの起動時にアプリケーションに追加しました)。

      私の問題は、スクリプトをrc.localまたはinit.dに配置すると、コンピューターがスクリプトを停止する方法がわからないことです。 つまり、明らかにPCをシャットダウン/再起動すると、すべてのプロセスが終了します(また、TransmissionとNethogsも同様に)が、スクリプトがどうなるかわかりません。

      そして、なぜそれが私を悩ますのですか? スクリプトは/ tmpにファイルを作成し、送信速度を制御します。 ターミナルで実行して突然停止した場合(たとえば、CTRL + cで)、閉じる前のスクリプトはデフォルトの速度を復元し(必要な場合)、Nethogsを停止し、/ tmpからファイルを削除します。 緩いファイルやバックグラウンドプロセスが残らないように、できるだけ「プロフェッショナル」にしようとしました。

      あなたの言ったことについて、私は「ライブアプリケーションタブ」が何であるかを理解していませんでした。

      1.    ホルヘ

        アプリケーションタブは永続的なタブであり、Firefox内で常に開いて最小化されます http://i.imgur.com/a5i0aP3.png (タブのコンテキストメニュー、«タブの貼り付け»をクリック)。 デーモンがTERMシグナルを送信すると、セッションが終了するまでしばらく待機し、データを保存します。 スクリプトを終了するときに前に示したリンクで、start-stop-daemonを呼び出し、送信を停止するように指示していることに注意してください。そこに「killallnethogs」とそれに含まれるStopScriptを貼り付けることができます。 この場合のinitスクリプトは、特権が必要なため、特定のユーザーではなくrootとして呼び出す必要があります。

        1.    ホアキン

          ヒントをありがとう。 時間があるとすぐに試してみます!

  4.   facundo

    素晴らしい、私はこの欠点に遭遇しました。なぜなら、あなたが速い接続を持っていても、サーフィンをしたい間は送信を制限しなければならず、したがって時間を「無駄にする」からです。
    できればやってみます。 ご挨拶と感謝!!

    1.    ホアキン

      おかげさまで! これがお役に立てば幸いです。

      1.    Facundo

        こんにちは、ホアキン。 あなたがすべてのコメントに答えてくれているようですので、それを利用して、新人の質問をいくつかします。
        まず、「awk」スクリプトがインストールされているかどうかを確認するにはどうすればよいですか? 私はDebian7.2を使用しています。
        次に、貼り付けコードをどうすればよいかわかりません。 テキストエディタを取得して「bandwidth-controller.sh」というファイルに保存し、「。/band-width-control.sh」として実行する必要があります。 これは私が最も失われている部分です。
        XNUMX番目:rootとして実行すると言う場合、ユーザーからrootに変更する必要がありますか、それともsudoで十分ですか?

        このテーマについて私を推薦するための読書があれば、私はそれを感謝します。
        ご挨拶!

  5.   ギスカード

    そのため、私は常にTransmissionをアンインストールし、Delugeをインストールします。 ええと、そのために、そしてデリュージが私に提供するもう少しのことは、他の人がもたらさないことです。

    1.    ホアキン

      こんにちは、私はデリュージを知りません。 私の主な問題はインターネットサービスです。 これで私はそれを最大限に絞ります。

  6.   パンダ

    こんにちは。 帯域幅も制限されているので、このスクリプトを試しました。 しかし、それは機能していません。 エラーはnethogs-tコマンドにあるようです。 「最初のパケットが到着するのを待っています(sourceforge.netバグ1019381を参照)」というエラーが返され、mint、archlinuxなどを試しましたが何もしませんでした。 そのコマンドは何を返すことになっていますか? 各アプリケーションで使用される帯域幅をプレーンテキストで印刷する必要があると思います。 ネットワークを聞くことができる別のプログラムを知っていますか?

    1.    ホアキン

      こんにちは、元気ですか。
      これはNethogsのバグです。 私にも見えますが、とにかく機能します。

      Nethogsが行うことは、最も多くの帯域幅を消費するプロセスをリアルタイムで表示することです。 スクリプトでは、その出力はテキストファイル「net.list」に保存されるため、後でフィルタリングできます。

      このスクリプトは、Transmission(BitTorrentクライアント)とFirefox(Webブラウザー)でのみ機能します。 FirefoxがWebページをロードしているときにTransmissionの帯域幅を制限します。 インストールする必要があるのは、Nethogs、Transmission、Transmission-remote、Firefoxです。

      それはすべて投稿で説明されているので、あなたの問題が何であるかはわかりません。

      PS:正しく書いて、スペルを改善してください。 これはコメントであり、テキストメッセージではありません。

      1.    パンダ

        スクリプトが機能しません。 そのエラーメッセージを何度も出力します。 ターミナルで「nethogs-t」を実行して何が行われるかを確認しますが、何も出力されず、エラーだけが出力されます。 私のPCでは動作していません。 プロセスと帯域幅を示して、-tなしで実行した場合と同様の出力が必要だと思います。 しかし、私の場合、それはそれのどれも印刷しません。 スクリプトの開発にどのディストリビューションを使用しましたか?

        1.    ホアキン

          よく見ると、投稿には使用されているすべてのソフトウェアとそのバージョンが含まれています。 エラーの理由はわかりませんが、「nethogs-t」を実行するたびに表示されます。 スクリプトでは、2インチごとに発生します。

          nethogsを実行すると、ネットワークを使用するプロセスがないため、出力が得られない可能性があります。

          nethogsはそのユーザーが機能する必要があるため、スクリプトはrootとして実行する必要があります。

          今、私は何か重要なことを思い出しました、そしてそれがあなたにとってうまくいかない理由を私は知っています:

          スクリプトを編集して、通常のユーザーの名前を変更する必要があります。 スクリプトでは、「joaquin」と呼ばれています。 ユーザー名に変更する必要があります。

          申し訳ありませんが、名前を変数に入れる必要がありました。 何が起こるかというと、私はそれをそれほど一般的にすることを考えていませんでした。あなたがそれを見て、欲しい人がそれを行う方法のアイデアを得ることができるように、あなたにそれを見せたかっただけです。 私はそれがどんなコンピュータでも動作することを意図してそれをしませんでした、それは時間がかかります、そして私はプログラムする方法を知りません、いくつかのことが私に起こります。

          頑張ってください、何でももう一度尋ねてください。 そして、スクリプトの投稿とコメントをもう一度読んでください。

  7.   Facundo

    Joaquínさん、こんにちは。次のことを教えてください。

    送信-リモート:(http://localhost:9091/transmission/rpc/)サーバーに接続できませんでした
    選択したデバイスeth0のローカルIPの確立中にioctlが失敗しました。 コマンドラインでデバイスを指定できます。

    何か案は?? ありがとう!

    1.    ホアキン

      こんにちは、元気ですか。
      すみませんが、わかりません😀
      エラーが言っていることを私が理解していることから、それはioctlの問題ですが、それが何であるかはわかりません。

      たぶん、スクリプトを停止して、mission-remoteがそのオプションのいくつかで機能するかどうかを確認してみてください(「man」コマンドでmanページを読んでください)。