Script Bash: contrôlez automatiquement la bande passante de transmission

Bonjour à tous. C'est mon deuxième poste. Je n'écris généralement pas de messages à moins d'avoir quelque chose de bien à partager et cette fois, j'ai quelque chose qui intéressera sûrement beaucoup de monde.

Il y a quelques mois, je pensais faire un script pour limiter la bande passante des applications, mais j'avais des problèmes et des erreurs qui me rendaient la tâche difficile, j'ai donc soulevé mes doutes dans le foro de <º DesdeLinux au cas où quelqu'un aurait une idée.

Alors je l'ai laissé un moment et un jour j'ai décidé de reprendre le scénario. J'ai fait beaucoup de tests, j'ai beaucoup lu sur Bash, et j'avais des maux de tête pendant mon temps libre, mais je l'ai fait !!

J'ai une énorme satisfaction et j'ai donc décidé de partager avec vous mon petit script pour que vous puissiez l'utiliser et l'améliorer. Je prévois de le licencier sous GPLv3, mais c'est mon premier projet donc je ne sais pas trop comment le faire (j'ai besoin des conseils de celui qui l'a déjà fait).

Eh bien, maintenant je vais vous expliquer quel était mon besoin et ce que j'ai fait pour résoudre le problème.

situation
J'ai un plan Internet de 512Kbs, donc j'utilise Transmission en tant que client BitTorrent pour télécharger des fichiers volumineux (comme LibreOffice et certaines distributions GNU / Linux). Avec cette vitesse, les téléchargements prennent beaucoup de temps et le problème est lors de l'utilisation du navigateur Web Firefox: prend beaucoup de temps à charger.

Lorsque je me connecte à Internet, j'active les délais de transfert et de téléchargement et j'attends le chargement de Firefox, puis je redémarre les torrents. Comme vous le verrez, faire cela plusieurs fois est fastidieux. Sans oublier que parfois, je mets en pause tous les torrents, puis j'oublie de les activer à nouveau, ce qui me fait perdre un temps précieux pour télécharger / télécharger les torrents.

Solution
Pour ce problème, j'ai décidé de créer un script dans Bash qui effectue essentiellement les opérations suivantes:

1. Vérifiez que la transmission est en cours d'exécution et qu'aucun torrent n'est en pause. Si tel est le cas, rallumez les torrents.

2. Vérifiez que Firefox est en cours d'exécution. Ensuite, il obtient les Ko / s envoyés et reçus par lui et les enregistre dans un fichier.

3. Si les Ko / s de téléchargement / téléchargement du navigateur dépassent une plage de référence, les paramètres de transfert / téléchargement sont modifiés.

Cela permet que lorsque vous souhaitez accéder à une page Web, lorsque le navigateur envoie la demande, le téléchargement du fichier de transmission est limité et lorsque les données de la page sont reçues, le téléchargement est limité. Cela fonctionne très bien lorsque vous accédez à plusieurs pages à la fois et les résultats sont en fait les mêmes que lorsque la transmission est désactivée.

Le grand avantage est qu'il est entièrement automatique et ne nécessite pas mon intervention.

le script
Bien qu'il puisse être utilisé pour contrôler la consommation de bande passante de n'importe quelle application, pour le moment, il n'est écrit que pour résoudre un problème très particulier. Mais il n'est pas très difficile de faire des modifications.

Exigences
Pour que cela fonctionne correctement, il est nécessaire d'avoir l'application «nethogs».

Dans ce cas, comme le script fonctionne avec Firefox et Transmission, il est nécessaire d'installer ces applications, en plus de "transmission-remote" qui est ce qui change les valeurs de téléchargement et de téléchargement des torrents. J'utilise également dans le script "awk". Je le mentionne car je ne sais pas si toutes les distributions l'ont installé.

Logiciel utilisé
Une liste des applications utilisées par le script et du système sur lequel il fonctionne.

• Debian GNU / Linux 6.0.8
• Linux 2.6.32-5-686
• Firefox 24.0
• Boîte de vitesses 2.03 (11030)
• Nethogs 0.7.0

Exécution
Il doit être exécuté en tant que root car nethogs ne peut être exécuté qu'avec cet utilisateur, mais transmission à distance il est exécuté avec l'utilisateur normal au moyen de la commande su.

Le script utilise la commande Bash interne piège Avec lequel il est possible de restaurer les valeurs par défaut de chargement / déchargement de la transmission, lorsqu'elle est arrêtée au moyen des signaux SIGINT (CTRL + c) ou SIGTERM.

Je ne sais toujours pas comment l'exécuter au démarrage et l'arrêter lorsque j'arrête ou redémarre l'ordinateur. Je pensais mettre un lien dans le fichier /etc/rc.local mais je ne sais pas si cela fonctionnerait, et je ne comprends pas vraiment comment fonctionne / etc /init.d (J'ai vu des scripts qui sont là, même squelette, mais je ne les comprends pas). Si quelqu'un peut m'aider, je serai très reconnaissant.

Eh bien les amis, c'est tout. J'espère que ma petite contribution vous sera utile et que vous pourrez l'améliorer si vous le souhaitez. Je serai ravi de lire vos avis et recommandations ainsi que vos suggestions en cas de problème de sécurité avec le fichier (je ne suis pas programmeur, je ne fais que quelques petites choses de temps en temps).

Je sais qu'avec quelques correctifs, cela peut devenir une excellente application à l'avenir, car je ne connais aucun programme qui fasse la même chose. Par exemple, il me vient à l'esprit que je pourrais avoir une interface graphique en zénité et pouvoir choisir les applications que l'on souhaite prioriser dans l'utilisation de la bande passante (navigateur web, gestionnaire de mise à jour, transfert de fichiers, etc.) et les différentes valeurs de référence. Oui, c'est quelque peu ambitieux, mais assez utile.

Vous pouvez télécharger le script dans le paste. Merci beaucoup d'avoir lu!!


Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont marqués avec *

*

*

  1. Responsable des données: Miguel Ángel Gatón
  2. Finalité des données: Contrôle du SPAM, gestion des commentaires.
  3. Légitimation: votre consentement
  4. Communication des données: Les données ne seront pas communiquées à des tiers sauf obligation légale.
  5. Stockage des données: base de données hébergée par Occentus Networks (EU)
  6. Droits: à tout moment, vous pouvez limiter, récupérer et supprimer vos informations.

  1.   animé dit

    Oh! Intéressant 😀

    1.    éliotime3000 dit

      Dans le coin inférieur gauche, vous avez la possibilité de limiter la bande passante consommée par Transmission à la fois lors du chargement et du téléchargement. Avec Transmission, je n'ai eu aucun problème avec ça.

      1.    gâteau dit

        Mais c'est automatique, et il y a aussi Transmission sans interface graphique, donc vous n'aurez peut-être pas cette fonction à portée de main.

      2.    Joaquin dit

        Bonjour, comment allez-vous.
        Oui je le sais déjà. Mais c'est exactement ce que je ne veux pas faire.
        J'ai un plan Internet très médiocre (512 Ko et c'est le meilleur de ma région).

        Avec mon scénario, je ne me soucie pas de tout faire à la main. Imaginez que vous ouvrez une page dans le navigateur et que la transmission occupe toute la bande passante à ce moment-là, donc la page prend un certain temps à se charger (au plus 1 ′, mais c'est exaspérant). J'en ai fini avec "l'activation des délais" toutes les deux minutes. Ceci est automatique et presque instantané (il vérifie les KB envoyés et reçus par Firefox toutes les 5 secondes).

        Vraiment dans mon cas, avec cette vitesse Internet, c'est excellent. De plus, je ne connais pas d'autre application qui fasse cela, sinon elle ne l'aurait pas fait. Ceux que j'ai vus limitent uniquement la bande passante, mais pas automatiquement.

        J'espère que j'ai été clair. Merci pour la lecture!

        1.    Joaquin dit

          Désolé je me suis trompé. Ce ne sont pas 512 Ko, mais plutôt des Kbits. (Autrement dit, 1/2 "Mega"). Le maximum que je peux télécharger est de 75 Ko / s et de 50 Ko / s en téléchargement. C'est à ce moment-là qu'Internet va bien, sinon la normale est de 48 et 23.

    2.    Joaquin dit

      Merci!

  2.   gâteau dit

    Intéressant, j'utilise qBittorrent et utilise le commutateur pour les limites.

    Le message est joli avec ces couleurs 😉

    1.    Joaquin dit

      Merci pour les couleurs. Je ne suis pas très bon dans ce domaine, cela semble très long et monotone avec autant de texte.

  3.   jorge dit

    Personnellement, j'utilise transmission-daemon et firefox avec un onglet d'application en direct, donc je ne marche pas avec des programmes externes ou j'oublie de continuer les torrents ou la tortue activée (et je peux le contrôler depuis mon téléphone). Pour démarrer un service, un utilisateur est ajouté (ex: adduser –disabled-password nethogs), un fichier texte pour le démon est créé dans /etc/init.d avec un nom (ex: nethogs-daemon) puis dans debian c'est tapez "update-rc.d nethogs-daemon defaults" pour qu'il démarre tout seul.

    Le fichier texte est également un script bash, dans lequel vous pouvez fusionner votre script.
    Voyez si cela peut vous aider, il peut être utilisé pour démarrer transmission-daemon, il peut être utilisé pour démarrer nethogs https://trac.transmissionbt.com/wiki/Scripts/initd

    1.    Joaquin dit

      Bonjour!
      Voyons si je comprends: il s'agit de démarrer la transmission au démarrage et de l'arrêter lors de l'arrêt ou du redémarrage. Avec cela, je n'ai aucun problème car il démarre toujours par lui-même et commence le téléchargement (je l'ai ajouté aux applications au démarrage dans Xfce).

      Mon problème est que si lors du placement du script dans rc.local ou dans init.d, je ne sais pas comment l'ordinateur arrête le script. Autrement dit, évidemment lors de l'arrêt / redémarrage du PC, tous les processus sont terminés (et avec eux Transmission et Nethogs également) mais je ne sais pas ce qui arriverait à mon script.

      Et pourquoi cela me dérange-t-il? Le script crée un fichier dans / tmp et contrôle la vitesse de transmission. Si je l'exécute dans un terminal et que je l'arrête soudainement (par exemple avec CTRL + c), le script avant la fermeture restaure les vitesses par défaut (au cas où cela serait nécessaire), puis arrête Nethogs et supprime le fichier de / tmp. J'ai essayé de le rendre aussi "professionnel" que possible afin qu'il ne laisse aucun fichier lâche ou processus d'arrière-plan.

      À propos de ce que vous avez dit, je n'ai pas compris ce qu'est "l'onglet d'application en direct".

      1.    jorge dit

        Un onglet d'application est un onglet permanent, il est toujours ouvert et minimisé dans Firefox http://i.imgur.com/a5i0aP3.png (menu contextuel sur onglet, cliquez sur «coller l'onglet»). Lorsque les démons envoient le signal TERM, ils attendent un moment, jusqu'à ce qu'ils aient fermé la session, et sauvegardent leurs données. Notez que dans le lien que j'ai donné auparavant en quittant le script appelle start-stop-daemon et dit à la transmission d'arrêter, vous pouvez y coller "killall nethogs" et ce qu'il contient StopScript. Le script init dans ce cas, vous devrez l'appeler en tant que root au lieu d'un utilisateur spécifique, car il a besoin de privilèges.

        1.    Joaquin dit

          Eh bien merci pour le tuyau. Dès que j'ai le temps, je l'essaye!

  4.   faundo dit

    super, j'ai rencontré cet inconvénient car même si vous avez une connexion rapide, vous êtes obligé de limiter la transmission pendant que vous voulez surfer et donc de "perdre" du temps.
    Je vais l'essayer quand je peux. Salutations et merci !!

    1.    Joaquin dit

      Merci a vous! J'espère que cela peut vous aider!

      1.    Facundo dit

        Rebonjour Joaquin. Je vois que vous prenez soin de répondre à tous les commentaires, alors je vais en profiter et je vais vous poser quelques questions pour les recrues.
        Premièrement, comment savoir si le script "awk" est installé? J'utilise Debian 7.2.
        Deuxièmement, je ne sais pas quoi faire avec le code de collage. Je dois saisir un éditeur de texte et l'enregistrer dans un fichier appelé "bandwidth-controller.sh", puis l'exécuter en tant que "./band-width-control.sh". C'est la partie où je suis le plus perdu.
        Troisièmement: lorsque vous dites exécutez-le en tant que root, est-il nécessaire de passer d'utilisateur à root ou avec sudo est-ce?

        Si vous avez des lectures à me recommander sur le sujet, je l'apprécie.
        Salutations!

  5.   giskard dit

    C'est pourquoi je désinstalle toujours Transmission et installe Deluge. Bon, pour ça et un peu plus que Deluge m'offre que l'autre n'apporte pas.

    1.    Joaquin dit

      Salut, je ne connais pas Deluge. Mon principal problème est le service Internet. Avec cela, je le serre au maximum.

  6.   Panda dit

    Salut. ma bande passante est également limitée, j'ai donc essayé ce script. Mais ça ne marche pas. l'erreur semble être dans la commande nethogs -t. il renvoie l'erreur "En attendant l'arrivée du premier paquet (voir le bogue sourceforge.net 1019381)" et j'ai essayé mint, archlinux et rien. Qu'est-ce que cette commande est censée renvoyer? Je suppose que je devrais imprimer en texte brut la bande passante utilisée par chaque application. Connaissez-vous un autre programme qui vous permet d'écouter le réseau?

    1.    Joaquin dit

      Bonjour, comment allez-vous.
      C'est un bogue Nethogs. Cela me semble aussi, mais ça marche quand même.

      Ce que fait Nethogs, c'est montrer les processus qui consomment le plus de bande passante, en temps réel. Dans le script, sa sortie est enregistrée dans un fichier texte "net.list", afin qu'elle puisse être filtrée ultérieurement.

      Le script ne fonctionne qu'avec Transmission (un client BitTorrent) et Firefox (navigateur Web). Cela limite la bande passante de Transmission lorsque Firefox charge une page Web. Vous devez installer: Nethogs, Transmission, Transmission-remote et Firefox.

      Tout est expliqué dans le post, donc je ne sais pas quel est votre problème.

      PS: Veuillez écrire correctement et améliorer votre orthographe. C'est un commentaire, pas un message texte.

      1.    Panda dit

        le script ne fonctionne pas pour moi. imprime ce message d'erreur plusieurs fois. lancez "nethogs -t" dans un terminal pour voir ce qu'il fait mais il n'affiche rien, juste l'erreur. sur mon pc, cela ne fonctionne pas. J'imagine qu'il devrait imprimer quelque chose de similaire à ce qu'il imprime lorsqu'il est exécuté sans le -t, montrant les processus et la bande passante. mais dans mon cas, il n'imprime rien de tout cela. quelle distribution avez-vous utilisée pour développer le script?

        1.    Joaquin dit

          Si vous regardez de près, l'article contient tous les logiciels utilisés et leurs versions. Je ne sais pas pourquoi l'erreur, mais elle m'apparaît à chaque fois que "nethogs -t" est exécuté. Dans le script, cela se produira tous les 2 ".

          Il se peut que lorsque vous exécutez nethogs, aucun processus n'utilise le réseau et c'est pourquoi vous n'obtenez aucune sortie.

          Le script doit être exécuté en tant que root car nethogs a besoin de cet utilisateur pour fonctionner.

          maintenant je me suis souvenu de quelque chose d'important et je sais pourquoi cela ne fonctionne pas pour vous:

          VOUS DEVEZ MODIFIER le script et changer le nom de l'utilisateur normal. Dans le script, il s'appelle "joaquin". Vous devez le remplacer par votre nom d'utilisateur.

          Désolé je ne m'en suis pas rendu compte, j'aurais dû mettre le nom dans une variable. Le fait est que je n'ai pas pensé à le rendre si général, je voulais juste vous le montrer pour que vous puissiez le voir et que ceux qui le souhaitent puissent avoir des idées sur la façon de le faire. Je ne l'ai pas fait avec l'intention que ça marche sur n'importe quel ordinateur, ça prend du temps et je ne sais pas programmer, il m'arrive des choses.

          Bonne chance, rien demander à nouveau. Et s'il vous plaît, relisez le post et les commentaires du script.

  7.   Facundo dit

    Bonjour Joaquín, dis-moi ce qui suit:

    transmission à distance: (http://localhost:9091/transmission/rpc/) Impossible de se connecter au serveur
    ioctl a échoué lors de l'établissement de l'adresse IP locale pour le périphérique sélectionné eth0. Vous pouvez spécifier le périphérique sur la ligne de commande.

    une idée?? Merci!

    1.    Joaquin dit

      Bonjour, comment allez-vous.
      Excusez-moi mais je n'en ai aucune idée 😀
      D'après ce que j'ai compris, l'erreur dit, c'est un problème avec ioctl, mais je ne sais pas ce que c'est.

      Vous pourriez peut-être essayer d'arrêter le script et voir si transmission-remote fonctionne avec certaines de ses options (lisez sa page de manuel avec la commande "man").