Script Bash: controlla automaticamente la larghezza di banda della trasmissione

Ciao a tutti. Questo è il mio secondo post. Di solito non scrivo post a meno che non abbia qualcosa di buono da condividere e questa volta ho qualcosa che sicuramente molti saranno interessati.

Qualche mese fa stavo pensando di realizzare uno script per limitare la larghezza di banda delle applicazioni, ma avevo alcuni problemi ed errori che mi rendevano difficile, quindi ho sollevato i miei dubbi nel foro de <º DesdeLinux nel caso qualcuno avesse un'idea.

Così l'ho lasciato per un po 'e un giorno ho deciso di riprendere la sceneggiatura. Ho fatto molti test, ho letto molto sulla bash e ho avuto mal di testa nel tempo libero, ma ce l'ho fatta !!

Ho enormi soddisfazioni e quindi ho deciso di condividere con voi il mio copione in modo che possiate utilizzarlo e migliorarlo. Ho intenzione di licenziarlo sotto GPLv3, ma è il mio primo progetto quindi non sono abbastanza sicuro di come farlo (ho bisogno di consigli da chi lo ha fatto prima).

Bene, ora ti spiego qual era la mia esigenza e cosa ho fatto per risolvere il problema.

Situazione
Ho un piano Internet di 512Kbs, quindi utilizzo Trasmissione come client BitTorrent per scaricare file di grandi dimensioni (come LibreOffice e alcune distribuzioni GNU / Linux). Con quella velocità i download richiedono molto tempo e il problema è quando si utilizza il browser web Firefox: richiede molto tempo per il caricamento.

Quando mi collego a Internet, attivo i limiti di tempo per il caricamento e il download della trasmissione e aspetto il caricamento di Firefox, quindi avvio nuovamente i torrent. Come vedrai, farlo un paio di volte è noioso. Per non parlare del fatto che a volte metto in pausa tutti i torrent e poi dimentico di attivarli di nuovo, il che porta a sprecare tempo prezioso per il caricamento / download dei torrent.

Soluzione
Per questo problema ho deciso di creare uno script in Bash che fondamentalmente fa quanto segue:

1. Verifica che la trasmissione sia in esecuzione e che nessun torrent sia in pausa. In tal caso, riattiva i torrent.

2. Verifica che Firefox sia in esecuzione. Quindi ottiene i KB inviati e ricevuti da esso e li salva in un file.

3. Se il caricamento / download del browser KB / s supera un intervallo di riferimento, le impostazioni di caricamento / download della trasmissione vengono modificate.

Ciò consente che quando si desidera accedere a una pagina Web, quando il browser invia la richiesta, il caricamento del file di trasmissione è limitato e quando vengono ricevuti i dati della pagina, il download è limitato. Funziona alla grande quando si accede a più pagine contemporaneamente ei risultati sono effettivamente gli stessi della trasmissione disabilitata.

Il grande vantaggio è che è completamente automatico e non richiede il mio intervento.

Il copione
Sebbene possa essere utilizzato per controllare il consumo di larghezza di banda di qualsiasi applicazione, al momento è scritto solo per risolvere un problema molto particolare. Ma non è molto difficile apportare modifiche.

Requisiti
Perché funzioni correttamente è necessario avere l'applicazione «nehogs'.

In questo caso, poiché lo script funziona con Firefox e Transmission, è necessario che siano installate queste applicazioni, oltre a "Transmission-Remote" che è quello che cambia i valori di upload e download dei torrent. Uso anche nello script "awk". Lo menziono perché non so se tutte le distribuzioni lo abbiano installato.

Software utilizzato
Un elenco delle applicazioni utilizzate dallo script e del sistema in cui funziona.

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

Esecuzione
Deve essere eseguito come root perché nehogs può essere eseguito solo con quell'utente, ma trasmissione a distanza viene eseguito con il normale utente tramite il comando su.

Lo script utilizza il comando Bash interno trappola Con il quale è possibile ripristinare i valori di default di carico / scarico della trasmissione, quando questa viene interrotta tramite i segnali SIGINT (CTRL + c) o SIGTERM.

Ancora non so come fare per eseguirlo all'avvio e fermarlo quando spengo o riavvio il computer. Stavo pensando di inserire un collegamento nel file /etc/rc.local ma non so se funzionerebbe e non capisco davvero come funzioni / etc /init.d (Ho visto anche alcuni script che ci sono scheletro, ma non li capisco). Se qualcuno può aiutarmi, te ne sarò molto grato.

Bene ragazzi, questo è tutto. Spero che il mio piccolo contributo ti sia utile e che tu possa migliorarlo se lo desideri. Sarò felice di leggere le vostre opinioni e consigli nonché suggerimenti nel caso in cui ci siano problemi di sicurezza con il file (non sono un programmatore, faccio solo poche cose di tanto in tanto).

So che con alcune correzioni può diventare un'ottima applicazione in futuro, perché non conosco nessun programma che faccia lo stesso. Ad esempio, mi viene in mente che potrei avere un'interfaccia grafica in formato zenit e per poter scegliere le applicazioni a cui vogliamo dare la priorità nell'uso della larghezza di banda (browser web, gestore aggiornamenti, trasferimento file, ecc.) e i diversi valori di riferimento. Sì, è un po 'ambizioso, ma abbastanza utile.

Puoi scaricare lo script nel file incolla. Grazie mille per la lettura !!


Lascia un tuo commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati con *

*

*

  1. Responsabile dei dati: Miguel Ángel Gatón
  2. Scopo dei dati: controllo SPAM, gestione commenti.
  3. Legittimazione: il tuo consenso
  4. Comunicazione dei dati: I dati non saranno oggetto di comunicazione a terzi se non per obbligo di legge.
  5. Archiviazione dati: database ospitato da Occentus Networks (UE)
  6. Diritti: in qualsiasi momento puoi limitare, recuperare ed eliminare le tue informazioni.

  1.   vivace suddetto

    Oh! Interessante 😀

    1.    eliotime3000 suddetto

      Nell'angolo in basso a sinistra hai la possibilità di limitare la larghezza di banda che la trasmissione consuma sia in caricamento che in download. Con Transmission non ho avuto alcun problema con esso.

      1.    biscotto suddetto

        Ma questo è automatico, e c'è anche Trasmissione senza interfaccia grafica, quindi potresti non avere quella funzione così a portata di mano.

      2.    Joaquin suddetto

        Ciao, come stai.
        Sì, lo so già. Ma è esattamente quello che non voglio fare.
        Ho un piano Internet molto scarso (512 KB ed è il migliore nella mia zona).

        Con la mia sceneggiatura, non mi preoccupo di fare tutto a mano. Immagina di aprire una pagina nel browser e la trasmissione sta occupando tutta la larghezza di banda in quel momento, quindi la pagina impiega un po 'di tempo per caricarsi (al massimo 1 ′, ma è esasperante). Ho finito con "l'attivazione dei limiti di tempo" ogni due minuti. Questo è automatico e quasi istantaneo (controlla ogni 5 secondi i KB inviati e ricevuti da Firefox).

        Davvero nel mio caso con quella velocità di Internet, è eccellente. Inoltre non conosco un'altra applicazione che fa questo, altrimenti non l'avrebbe fatto. Quelli che ho visto limitano solo la larghezza di banda, ma non automaticamente.

        Spero di essere stato chiaro. Grazie per aver letto!

        1.    Joaquin suddetto

          Ho sbagliato scusa. Non sono 512 KB, piuttosto sono Kbit. (Cioè, 1/2 "Mega"). Il massimo che posso scaricare è 75 KB / se caricamento di 50 KB / s. Che quando Internet va bene, altrimenti il ​​normale è 48 e 23.

    2.    Joaquin suddetto

      Grazie!

  2.   biscotto suddetto

    Interessante, uso qBittorrent e uso l'interruttore per i limiti.

    Il post sembra carino con quei colori 😉

    1.    Joaquin suddetto

      Grazie per i colori. Non sono molto bravo, sembra molto lungo e monotono con così tanto testo.

  3.   jorge suddetto

    Personalmente, utilizzo il daemon di trasmissione e Firefox con una scheda dell'applicazione live, quindi non cammino con programmi esterni o dimentico di continuare i torrent o la tartaruga attivata (e posso controllarlo dal mio telefono). Per avviare un servizio viene aggiunto un utente (es: adduser –disabled-password nethogs), un file di testo per il demone viene creato in /etc/init.d con un nome (es: nethogs-daemon) e poi in debian è digita "update-rc.d nethogs-daemon defaults" in modo che si avvii da solo.

    Anche il file di testo è uno script bash, in cui puoi unire il tuo script.
    Vedi se questo può aiutarti, può essere usato per avviare il demone di trasmissione, può essere usato per avviare i nethog https://trac.transmissionbt.com/wiki/Scripts/initd

    1.    Joaquin suddetto

      Ciao!
      Vediamo se ho capito: questo serve per avviare la trasmissione all'avvio e interromperla allo spegnimento o al riavvio. Con quello non ho problemi poiché si avvia sempre da solo e inizia il download (l'ho aggiunto alle applicazioni all'avvio in Xfce).

      Il mio problema è che se inserendo lo script in rc.local o in init.d non so come il computer interrompe lo script. Ovviamente quando si spegne / riavvia il PC, tutti i processi vengono terminati (e con essi anche Transmission e Nethogs) ma non so cosa succederebbe al mio script.

      E perché mi dà fastidio? Lo script crea un file in / tmp e controlla la velocità di trasmissione. Se lo eseguo da terminale e lo interrompo improvvisamente (ad esempio con CTRL + c), lo script, prima di chiudersi, ripristina le velocità di default (se necessario) e poi ferma Nethogs e cancella il file da / tmp. Ho cercato di renderlo il più "professionale" possibile in modo da non lasciare file sciolti o processi in background.

      Riguardo a quello che hai detto, non ho capito cosa sia la "scheda dell'applicazione live".

      1.    jorge suddetto

        Una scheda dell'applicazione è una scheda permanente, è sempre aperta e ridotta a icona in Firefox http://i.imgur.com/a5i0aP3.png (menu contestuale sulla scheda, fare clic su «incolla scheda»). Quando i demoni inviano il segnale TERM, aspettano un po ', fino a dopo essersi scollegati, e salvano i loro dati. Si noti che nel collegamento che ho fornito prima quando si esce dallo script chiama start-stop-daemon e dice alla trasmissione di fermarsi, lì si potrebbe incollare "killall nethogs" e cosa contiene StopScript. L'init script in questo caso dovresti chiamarlo come root invece che come utente specifico, poiché ha bisogno di privilegi.

        1.    Joaquin suddetto

          Bene, grazie per la punta. Appena ho tempo lo provo!

  4.   facundo suddetto

    fantastico, mi sono imbattuto in questo inconveniente poiché anche se hai una connessione veloce, sei costretto a limitare la trasmissione mentre vuoi navigare e quindi "perdere" tempo.
    Lo proverò quando posso. Saluti e grazie !!

    1.    Joaquin suddetto

      Grazie a te! Spero che questo possa aiutarti!

      1.    Facundo suddetto

        Ciao di nuovo Joaquin. Vedo che ti stai occupando di rispondere a tutti i commenti, quindi ne approfitterò e ti farò un paio di domande da principiante.
        Innanzitutto, come faccio a sapere se ho installato lo script "awk"? Uso Debian 7.2.
        Secondo, non so cosa fare con il codice incolla. Devo prendere un editor di testo e salvarlo in un file chiamato "bandwidth-controller.sh" e quindi eseguirlo come "./band-width-control.sh". Questa è la parte in cui mi sono perso di più.
        Terzo: quando dici di eseguirlo come root, è necessario passare da utente a root o è sufficiente con sudo?

        Se hai qualche lettura da consigliarmi sull'argomento, lo apprezzo.
        Saluti!

  5.   Giskard suddetto

    Ecco perché disinstallo sempre Transmission e installo Deluge. Bene, per questo e per un po 'di più che Deluge mi offre che l'altro non porta.

    1.    Joaquin suddetto

      Ciao, non conosco Deluge. Il mio problema principale è il servizio Internet. Con questo lo spremo al massimo.

  6.   panda suddetto

    Ciao. anche la mia larghezza di banda è limitata, quindi ho provato questo script. Ma non funziona. l'errore sembra essere nel comando nethogs -t. restituisce l'errore "In attesa dell'arrivo del primo pacchetto (vedere il bug 1019381 di sourceforge.net)" e ho provato mint, archlinux e niente. Che cosa dovrebbe restituire quel comando? Suppongo che dovrei stampare in testo normale la larghezza di banda utilizzata da ciascuna applicazione. Conosci un altro programma che ti permette di ascoltare la rete?

    1.    Joaquin suddetto

      Ciao, come stai.
      Questo è un bug dei Nethogs. Anche a me sembra, ma funziona comunque.

      Quello che fa Nethogs è mostrare i processi che consumano più larghezza di banda, in tempo reale. Nello script, il suo output viene salvato in un file di testo "net.list", in modo che possa essere filtrato in seguito.

      Lo script funziona solo con Transmission (un client BitTorrent) e Firefox (browser web). Quello che fa è limitare la larghezza di banda di trasmissione quando Firefox sta caricando una pagina web. È necessario installare: Nethogs, Transmission, Transmission-remote e Firefox.

      È tutto spiegato nel post, quindi non so quale sia il tuo problema.

      PS: scrivi correttamente e migliora l'ortografia. È un commento, non un messaggio di testo.

      1.    panda suddetto

        lo script non funziona per me. stampa quel messaggio di errore molte volte. eseguire "nethogs -t" in un terminale per vedere cosa fa ma non stampa nulla, solo l'errore. sul mio pc non funziona. Immagino che dovrebbe stampare qualcosa di simile a quello che stampa quando viene eseguito senza -t, mostrando i processi e la larghezza di banda. ma nel mio caso non stampa niente di tutto ciò. quale distro hai usato per sviluppare lo script?

        1.    Joaquin suddetto

          Se guardi da vicino, il post contiene tutto il software utilizzato e le sue versioni. Non so perché l'errore, ma mi appare ogni volta che viene eseguito "nethogs -t". Nello script accadrà ogni 2 ″.

          È possibile che quando esegui nethogs, non ci sia alcun processo che utilizza la rete ed è per questo che non ottieni alcun output.

          Lo script deve essere eseguito come root perché nethogs ha bisogno di quell'utente per funzionare.

          ora mi sono ricordato una cosa importante e so perché non funziona per te:

          È NECESSARIO MODIFICARE lo script e cambiare il nome dell'utente normale. Nella sceneggiatura si chiama "joaquin". Devi cambiarlo con il tuo nome utente.

          Scusa non me ne sono accorto, avrei dovuto mettere il nome in una variabile. Il fatto è che non ho pensato di renderlo così generale, volevo solo mostrartelo in modo che tu possa vederlo e chi vuole possa avere idee su come farlo. Non l'ho fatto con l'intenzione che funzionasse su qualsiasi computer, questo richiede tempo e non so programmare, alcune cose mi accadono.

          Buona fortuna, chiedi di nuovo qualsiasi cosa. E per favore leggi di nuovo il post e i commenti della sceneggiatura.

  7.   Facundo suddetto

    Ciao Joaquín, dimmi quanto segue:

    trasmissione-telecomando: (http://localhost:9091/transmission/rpc/) Impossibile connettersi al server
    ioctl non è riuscito durante la creazione dell'IP locale per il dispositivo selezionato eth0. È possibile specificare il dispositivo sulla riga di comando.

    qualche idea?? Grazie!

    1.    Joaquin suddetto

      Ciao, come stai.
      Mi scusi ma non ne ho idea 😀
      Da quello che ho capito l'errore dice, è un problema con ioctl, ma non so cosa sia.

      Forse potresti provare a fermare lo script e vedere se Transmission-Remote funziona con alcune delle sue opzioni (leggi la sua pagina man con il comando "man").