Script Bash: Automatische Steuerung der Übertragungsbandbreite

Hallo, alle miteinander. Dies ist mein zweiter Beitrag. Normalerweise schreibe ich keine Beiträge, es sei denn, ich habe etwas Gutes zu teilen und dieses Mal habe ich etwas, an dem sicherlich viele interessiert sein werden.

Vor ein paar Monaten habe ich darüber nachgedacht, ein Skript zu erstellen, um die Bandbreite von Anwendungen zu begrenzen, aber ich hatte einige Probleme und Fehler, die es mir schwer machten, und deshalb habe ich meine Zweifel an der Forum de <º DesdeLinux falls jemand eine Idee hatte.

Also habe ich es für eine Weile verlassen und eines Tages beschlossen, das Skript fortzusetzen. Ich habe viel getestet, viel über Bash gelesen und in meiner Freizeit hatte ich Kopfschmerzen, aber ich habe es geschafft !!

Ich bin sehr zufrieden und habe mich daher entschlossen, mein kleines Skript mit Ihnen zu teilen, damit Sie es verwenden und verbessern können. Ich habe vor, es unter GPLv3 zu lizenzieren, aber es ist mein erstes Projekt, daher bin ich mir nicht ganz sicher, wie ich das machen soll (ich brauche Rat von jedem, der es zuvor gemacht hat).

Nun werde ich erklären, was ich brauchte und was ich getan habe, um das Problem zu lösen.

Situation
Ich habe einen Internet-Tarif von 512 KBit / s, daher benutze ich Transmission als BitTorrent-Client zum Herunterladen großer Dateien (wie LibreOffice und einige GNU / Linux-Distributionen). Bei dieser Geschwindigkeit dauert das Herunterladen sehr lange und das Problem liegt in der Verwendung des Webbrowsers Firefox: Das Laden dauert lange.

Wenn ich eine Verbindung zum Internet herstelle, aktiviere ich das Upload- und Download-Zeitlimit von Transmission und warte, bis Firefox geladen ist, und starte dann die Torrents erneut. Wie Sie sehen werden, ist es mühsam, dies ein paar Mal zu tun. Ganz zu schweigen davon, dass ich manchmal alle Torrents pausiere und dann vergesse, sie erneut zu aktivieren, was zu einer Verschwendung wertvoller Zeit für das Hoch- und Herunterladen von Torrents führt.

Lösung
Für dieses Problem habe ich beschlossen, ein Bash-Skript zu erstellen, das im Wesentlichen Folgendes ausführt:

1. Überprüfen Sie, ob die Übertragung läuft und kein Torrent angehalten ist. Wenn ja, schalten Sie die Torrents wieder ein.

2. Stellen Sie sicher, dass Firefox ausgeführt wird. Dann werden die KB / s von ihm gesendet und empfangen und in einer Datei gespeichert.

3. Wenn der Browser-Upload oder -Download von KB / s einen Referenzbereich überschreitet, werden die Upload- / Download-Einstellungen für die Übertragung geändert.

Dies ermöglicht, dass beim Zugriff auf eine Webseite, wenn der Browser die Anforderung sendet, der Upload der Übertragungsdatei begrenzt ist und wenn die Seitendaten empfangen werden, der Download begrenzt ist. Dies funktioniert hervorragend, wenn Sie auf mehrere Seiten gleichzeitig zugreifen. Die Ergebnisse sind dieselben wie bei deaktivierter Übertragung.

Der große Vorteil ist, dass es vollautomatisch ist und mein Eingreifen nicht erfordert.

Das Skript
Obwohl es verwendet werden könnte, um den Bandbreitenverbrauch einer Anwendung zu steuern, wird es derzeit nur geschrieben, um ein ganz bestimmtes Problem zu lösen. Es ist jedoch nicht sehr schwierig, Änderungen vorzunehmen.

Bedarf
Damit es richtig funktioniert, ist es notwendig, das «zu habenNethogs".

Da das Skript mit Firefox und Transmission funktioniert, müssen in diesem Fall diese Anwendungen sowie "Transmission-Remote" installiert sein, wodurch sich die Upload- und Download-Werte der Torrents ändern. Ich benutze auch im Skript "awk". Ich erwähne es, weil ich nicht weiß, ob alle Distributionen es installiert haben.

Verwendete Software
Eine Liste der vom Skript verwendeten Anwendungen und des Systems, auf dem es funktioniert.

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

Ausführung
Es muss als root ausgeführt werden, weil Nethogs kann nur mit diesem Benutzer ausgeführt werden, aber Übertragungsfernbedienung es wird mit dem normalen Benutzer mittels des Befehls ausgeführt su.

Das Skript verwendet den internen Bash-Befehl Falle Womit es möglich ist, die Standardwerte für das Laden / Entladen des Getriebes wiederherzustellen, wenn es mit den Signalen SIGINT (STRG + c) oder SIGTERM gestoppt wird.

Ich bin mir immer noch nicht sicher, wie ich es beim Start ausführen und stoppen soll, wenn ich den Computer herunterfahre oder neu starte. Ich dachte daran, einen Link in die Datei einzufügen /etc/rc.local aber ich weiß nicht, ob es funktionieren würde, und ich verstehe nicht wirklich, wie / etc / funktioniertinit.d (Ich habe sogar einige Skripte gesehen, die da sind Skelett, aber ich verstehe sie nicht). Wenn mir jemand helfen kann, werde ich sehr dankbar sein.

Nun Leute, das war's. Ich hoffe, dass mein kleiner Beitrag für Sie nützlich ist und dass Sie ihn verbessern können, wenn Sie es wünschen. Gerne lese ich Ihre Meinungen und Empfehlungen sowie Vorschläge für den Fall, dass Sicherheitsprobleme mit der Datei auftreten (ich bin kein Programmierer, ich mache nur ein paar Dinge von Zeit zu Zeit).

Ich weiß, dass es mit einigen Korrekturen in Zukunft eine großartige Anwendung werden kann, da ich kein Programm kenne, das dasselbe tut. Zum Beispiel fällt mir ein, dass ich eine grafische Oberfläche haben könnte Zenität und in der Lage zu sein, die Anwendungen auszuwählen, die wir bei der Verwendung der Bandbreite (Webbrowser, Update Manager, Dateiübertragung usw.) und der verschiedenen Referenzwerte priorisieren möchten. Ja, es ist etwas ehrgeizig, aber sehr nützlich.

Sie können das Skript im herunterladen Einfügen. Vielen Dank fürs Lesen !!


Hinterlasse einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert mit *

*

*

  1. Verantwortlich für die Daten: Miguel Ángel Gatón
  2. Zweck der Daten: Kontrolle von SPAM, Kommentarverwaltung.
  3. Legitimation: Ihre Zustimmung
  4. Übermittlung der Daten: Die Daten werden nur durch gesetzliche Verpflichtung an Dritte weitergegeben.
  5. Datenspeicherung: Von Occentus Networks (EU) gehostete Datenbank
  6. Rechte: Sie können Ihre Informationen jederzeit einschränken, wiederherstellen und löschen.

  1.   lebhaft sagte

    Oh! Interessant 😀

    1.    eliotime3000 sagte

      In der unteren linken Ecke haben Sie die Möglichkeit, die Bandbreite zu begrenzen, die die Übertragung sowohl beim Hochladen als auch beim Herunterladen verbraucht. Mit Transmission hatte ich kein Problem damit.

      1.    Plätzchen sagte

        Dies erfolgt jedoch automatisch, und es gibt auch eine Übertragung ohne grafische Oberfläche, sodass Sie diese Funktion möglicherweise nicht so schnell zur Hand haben.

      2.    Joaquin sagte

        Hallo wie geht's dir.
        Ja das weiß ich schon. Aber genau das möchte ich nicht tun.
        Ich habe einen sehr schlechten Internet-Tarif (512 KB und der beste in meiner Region).

        Mit meinem Skript mache ich mir keine Sorgen, alles von Hand zu machen. Stellen Sie sich vor, Sie öffnen eine Seite im Browser und die Übertragung belegt in diesem Moment die gesamte Bandbreite, sodass das Laden der Seite eine Weile dauert (höchstens 1 ', aber es ist ärgerlich). Ich habe es satt, alle zwei Minuten "Zeitlimits zu aktivieren". Dies erfolgt automatisch und fast sofort (es überprüft alle 5 Sekunden die von Firefox gesendete und empfangene KB).

        Wirklich in meinem Fall mit dieser Internetgeschwindigkeit ist es ausgezeichnet. Ich kenne auch keine andere Anwendung, die dies tut, sonst hätte sie es nicht getan. Diejenigen, die ich gesehen habe, begrenzen nur die Bandbreite, aber nicht automatisch.

        Ich hoffe ich war klar. Danke fürs Lesen!

        1.    Joaquin sagte

          Entschuldige, ich lag falsch. Sie sind nicht 512 KB, sondern Kbit. (Das heißt, 1/2 "Mega"). Ich kann maximal 75 KB / s und 50 KB / s hochladen. Dann ist das Internet in Ordnung, ansonsten sind es 48 und 23.

    2.    Joaquin sagte

      Thanks!

  2.   Plätzchen sagte

    Interessanterweise benutze ich qBittorrent und benutze den Schalter für Limits.

    Der Beitrag sieht gut aus mit diesen Farben 😉

    1.    Joaquin sagte

      Danke für die Farben. Ich bin nicht sehr gut darin, es scheint sehr lang und eintönig mit so viel Text.

  3.   jorge sagte

    Persönlich verwende ich Transmission-Daemon und Firefox mit einer Registerkarte für Live-Anwendungen, damit ich nicht mit externen Programmen spazieren gehe oder vergesse, die Torrents oder die aktivierte Schildkröte fortzusetzen (und ich kann sie von meinem Telefon aus steuern). Um einen Dienst zu starten, wird ein Benutzer hinzugefügt (z. B. adduser –disabled-password nethogs). Eine Textdatei für den Dämon wird in /etc/init.d mit einem Namen (z. B. nethogs-daemon) erstellt und dann in debian Geben Sie "update-rc.d nethogs-daemon default" ein, damit es von selbst gestartet wird.

    Die Textdatei ist ebenfalls ein Bash-Skript, in das Sie Ihr Skript einfügen können.
    Sehen Sie, ob dies Ihnen helfen kann, es kann verwendet werden, um den Übertragungsdämon zu starten, es kann verwendet werden, um Nethogs zu starten https://trac.transmissionbt.com/wiki/Scripts/initd

    1.    Joaquin sagte

      Hallo!
      Mal sehen, ob ich das verstehe: Dies dient dazu, die Übertragung beim Start zu starten und beim Herunterfahren oder Neustarten zu stoppen. Damit habe ich keine Probleme, da es immer von selbst startet und herunterlädt (ich habe es den Anwendungen beim Start in Xfce hinzugefügt).

      Mein Problem ist, dass ich nicht weiß, wie der Computer das Skript stoppt, wenn ich das Skript in rc.local oder in init.d platziere. Das heißt, natürlich werden beim Herunterfahren / Neustarten des PCs alle Prozesse beendet (und damit auch Transmission und Nethogs), aber ich weiß nicht, was mit meinem Skript passieren würde.

      Und warum stört mich das? Das Skript erstellt eine Datei in / tmp und steuert die Übertragungsgeschwindigkeit. Wenn ich es in einem Terminal ausführe und es plötzlich stoppe (zum Beispiel mit STRG + c), stellt das Skript vor dem Schließen die Standardgeschwindigkeiten wieder her (falls erforderlich) und stoppt dann Nethogs und löscht die Datei aus / tmp. Ich habe versucht, es so "professionell" wie möglich zu gestalten, damit keine losen Dateien oder Hintergrundprozesse zurückbleiben.

      Über das, was Sie gesagt haben, habe ich nicht verstanden, was "Registerkarte" Live-Anwendung "ist.

      1.    jorge sagte

        Eine Anwendungsregisterkarte ist eine permanente Registerkarte, die in Firefox immer geöffnet und minimiert ist http://i.imgur.com/a5i0aP3.png (Kontextmenü auf der Registerkarte, klicken Sie auf «Registerkarte einfügen»). Wenn die Dämonen ein TERM-Signal senden, warten sie eine Weile, bis sie die Sitzung geschlossen haben, und speichern ihre Daten. Beachten Sie, dass Sie in dem Link, den ich zuvor beim Beenden des Skripts angegeben habe, start-stop-daemon aufrufen und die Übertragung anweisen, anzuhalten, dort "killall nethogs" und das darin enthaltene StopScript einfügen können. Das Init-Skript müsste in diesem Fall als root anstelle eines bestimmten Benutzers aufgerufen werden, da es Berechtigungen benötigt.

        1.    Joaquin sagte

          Na danke für den Tipp. Sobald ich Zeit habe, versuche ich es!

  4.   Facundo sagte

    Großartig, ich bin auf diese Unannehmlichkeit gestoßen, denn selbst wenn Sie eine schnelle Verbindung haben, sind Sie gezwungen, die Übertragung zu beschränken, während Sie surfen möchten, und damit Zeit zu "verschwenden".
    Ich werde es versuchen, wenn ich kann. Grüße und danke !!

    1.    Joaquin sagte

      Danke dir! Hoffe das kann dir helfen!

      1.    Facundo sagte

        Hallo nochmal Joaquin. Ich sehe, dass Sie sich darum kümmern, auf alle Kommentare zu antworten, also werde ich das ausnutzen und Ihnen ein paar Anfängerfragen stellen.
        Woher weiß ich zunächst, ob ich das Skript "awk" installiert habe? Ich benutze Debian 7.2.
        Zweitens weiß ich nicht, was ich mit dem Einfügecode machen soll. Ich muss mir einen Texteditor schnappen und ihn in einer Datei namens "bandwidth-controller.sh" speichern und dann als "./band-width-control.sh" ausführen. Dies ist der Teil, in dem ich am meisten verloren bin.
        Drittens: Wenn Sie sagen, führen Sie es als root aus, ist es notwendig, von Benutzer zu root zu wechseln, oder mit sudo?

        Wenn Sie eine Lektüre haben, die mich zu diesem Thema empfehlen kann, weiß ich das zu schätzen.
        Viele Grüße!

  5.   giskard sagte

    Deshalb deinstalliere ich Transmission immer und installiere Deluge. Nun, dafür und für ein bisschen mehr Dinge, die Deluge mir anbietet, bringt der andere nicht.

    1.    Joaquin sagte

      Hallo, ich kenne Deluge nicht. Mein Hauptproblem ist der Internetdienst. Damit drücke ich es in vollen Zügen.

  6.   Panda sagte

    Hallo. Meine Bandbreite ist ebenfalls begrenzt, daher habe ich dieses Skript ausprobiert. Aber es funktioniert nicht. Der Fehler scheint im Befehl nethogs -t zu liegen. Gibt den Fehler "Warten auf das Eintreffen des ersten Pakets (siehe Fehler 1019381 von sourceforge.net)" zurück. Ich habe Mint, Archlinux und nichts ausprobiert. Was soll dieser Befehl zurückgeben? Ich nehme an, ich sollte die von jeder Anwendung verwendete Bandbreite im Klartext drucken. Kennen Sie ein anderes Programm, mit dem Sie das Netzwerk abhören können?

    1.    Joaquin sagte

      Hallo wie geht's dir.
      Das ist ein Nethogs-Bug. Es scheint mir auch, aber es funktioniert trotzdem.

      Nethogs zeigt in Echtzeit die Prozesse an, die die meiste Bandbreite verbrauchen. Im Skript wird die Ausgabe in einer Textdatei "net.list" gespeichert, damit sie später gefiltert werden kann.

      Das Skript funktioniert nur mit Transmission (einem BitTorrent-Client) und Firefox (Webbrowser). Dadurch wird die Bandbreite der Übertragung begrenzt, wenn Firefox eine Webseite lädt. Sie müssen installieren: Nethogs, Transmission, Transmission-Remote und Firefox.

      Es wird alles in der Post erklärt, also weiß ich nicht, was dein Problem ist.

      PS: Bitte schreibe richtig und verbessere deine Rechtschreibung. Es ist ein Kommentar, keine Textnachricht.

      1.    Panda sagte

        Das Skript funktioniert bei mir nicht. druckt diese Fehlermeldung viele Male. Führen Sie "nethogs -t" in einem Terminal aus, um zu sehen, was es tut, aber es druckt nichts, nur den Fehler. auf meinem PC funktioniert es nicht. Ich stelle mir vor, dass es etwas Ähnliches drucken sollte, wie es gedruckt wird, wenn es ohne das -t ausgeführt wird, wobei die Prozesse und die Bandbreite angezeigt werden. aber in meinem Fall druckt es nichts davon. Mit welcher Distribution haben Sie das Skript entwickelt?

        1.    Joaquin sagte

          Wenn Sie genau hinschauen, enthält der Beitrag die gesamte verwendete Software und ihre Versionen. Ich weiß nicht warum, aber der Fehler erscheint mir jedes Mal, wenn "nethogs -t" ausgeführt wird. Im Skript wird es alle 2 "passieren.

          Es kann sein, dass beim Ausführen von Nethogs kein Prozess über das Netzwerk ausgeführt wird und Sie daher keine Ausgabe erhalten.

          Das Skript muss als root ausgeführt werden, da nethogs diesen Benutzer benötigt, um zu funktionieren.

          Jetzt habe ich mich an etwas Wichtiges erinnert und weiß, warum es bei Ihnen nicht funktioniert:

          Sie müssen das Skript bearbeiten und den Namen des normalen Benutzers ändern. Im Skript heißt es "Joaquin". Sie müssen es in den Namen Ihres Benutzers ändern.

          Entschuldigung, das habe ich nicht bemerkt, ich hätte den Namen in eine Variable einfügen sollen. Die Sache ist, dass ich nicht daran gedacht habe, es so allgemein zu machen, ich wollte es dir nur zeigen, damit du es sehen kannst und diejenigen, die es wollen, Ideen bekommen, wie es geht. Ich habe es nicht mit der Absicht gemacht, dass es auf irgendwelchen Geräten funktioniert, das braucht Zeit und ich weiß nicht, wie man programmiert, einige Dinge passieren mir.

          Viel Glück, alles noch einmal fragen. Und bitte lesen Sie den Beitrag und die Kommentare des Skripts noch einmal.

  7.   Facundo sagte

    Hallo Joaquín, sag mir folgendes:

    Übertragungsfernbedienung: (http://localhost:9091/transmission/rpc/) Verbindung zum Server konnte nicht hergestellt werden
    ioctl ist beim Einrichten der lokalen IP für das ausgewählte Gerät eth0 fehlgeschlagen. Sie können das Gerät in der Befehlszeile angeben.

    irgendwelche Ideen?? Vielen Dank!

    1.    Joaquin sagte

      Hallo wie geht's dir.
      Entschuldigung, aber ich habe keine Ahnung 😀
      Soweit ich weiß, ist der Fehler ein Problem mit ioctl, aber ich weiß nicht, was das ist.

      Vielleicht könnten Sie versuchen, das Skript zu stoppen und zu prüfen, ob die Übertragungsfernbedienung mit einigen ihrer Optionen funktioniert (lesen Sie die Manpage mit dem Befehl "man").