Script Bash: controle a largura de banda de transmissão automaticamente

Olá a todos. Esta é a minha segunda postagem. Normalmente não escrevo posts, a menos que tenha algo bom para compartilhar e, desta vez, algo que certamente interessará a muitos.

Há alguns meses estava pensando em fazer um script para limitar a largura de banda dos aplicativos, mas tive alguns problemas e erros que dificultaram para mim, por isso levantei minhas dúvidas no fórum de <º DesdeLinux caso alguém tenha uma ideia.

Então parei por um tempo e um dia resolvi retomar o roteiro. Fiz muitos testes, li muito sobre o bash e tive dores de cabeça nas horas vagas, mas consegui !!

Estou com uma satisfação enorme e por isso decidi compartilhar meu pequeno roteiro com vocês para que possam utilizá-lo e aprimorá-lo. Pretendo licenciá-lo sob a GPLv3, mas é meu primeiro projeto, então não tenho certeza de como fazer isso (preciso do conselho de quem já fez isso antes).

Bem, agora vou explicar qual era a minha necessidade e o que fiz para resolver o problema.

Situação
Eu tenho um plano de Internet de 512Kbs, portanto, uso Transmissão como um cliente BitTorrent para baixar arquivos grandes (como LibreOffice e algumas distros GNU / Linux). Com essa velocidade os downloads demoram muito e o problema é quando se usa o navegador Firefox: leva muito tempo para carregar.

Quando me conecto à Internet, ativo os limites de tempo de upload e download do Transmission, espero o Firefox carregar e inicio os torrents novamente. Como você verá, fazer isso algumas vezes é entediante. Sem mencionar que às vezes eu interrompo completamente todos os torrents e depois esqueço de ligá-los novamente, levando a perda de tempo valioso para fazer upload / download dos torrents.

Solução
Para este problema, decidi criar um script no Bash que basicamente faz o seguinte:

1. Verifique se a transmissão está em execução e se nenhum torrent está pausado. Nesse caso, ative os torrents novamente.

2. Verifique se o Firefox está em execução. Em seguida, ele obtém os KB / s enviados e recebidos por ele e os salva em um arquivo.

3. Se o upload / download em KB / s do navegador exceder um intervalo de referência, as configurações de upload / download de transmissão serão alteradas.

Isso permite que, ao desejar acessar uma página web, quando o navegador enviar a solicitação, o upload do arquivo de transmissão seja limitado e quando os dados da página forem recebidos, o download seja limitado. Isso funciona muito bem ao acessar várias páginas de uma vez e os resultados são realmente os mesmos que com a transmissão desativada.

A grande vantagem é que é totalmente automático e não requer minha intervenção.

o script
Embora pudesse ser usado para controlar o consumo de largura de banda de qualquer aplicativo, no momento ele foi escrito apenas para resolver um problema muito particular. Mas não é muito difícil fazer modificações.

requisitos
Para que funcione bem é necessário ter a aplicação «nethogs".

Neste caso, como o script funciona com Firefox e Transmission, é necessário que estes aplicativos estejam instalados, além do "transmission-remote" que é aquele que altera os valores de upload e download dos torrents. Também uso no script "awk". Menciono isso porque não sei se todas as distros o têm instalado.

Software utilizado
Uma lista dos aplicativos que o script usa e o sistema em que ele funciona.

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

Execução
Deve ser executado como root porque nethogs só pode ser executado com esse usuário, mas transmissão remota é executado com o usuário normal por meio do comando su.

O script usa o comando interno Bash armadilha Com o qual é possível restaurar os valores padrão de carga / descarga da transmissão, quando esta é interrompida por meio dos sinais SIGINT (CTRL + c) ou SIGTERM.

Ainda não sei como fazer para executá-lo na inicialização e parar quando eu desligar ou reiniciar o computador. Eu estava pensando em colocar um link no arquivo /etc/rc.local mas eu não sei se funcionaria, e eu realmente não entendo como / etc / funcionainiciar.d (Vi alguns scripts que estão lá, até esqueleto, mas eu não os entendo). Se alguém puder me ajudar, ficarei muito grato.

Bem pessoal, é isso. Espero que minha pequena contribuição seja útil para você e que você possa melhorá-la se desejar. Terei todo o gosto em ler as suas opiniões e recomendações, bem como sugestões, caso haja problemas de segurança com o ficheiro (não sou programador, faço apenas algumas coisas de vez em quando).

Sei que, com algumas correções, ele pode se tornar um ótimo aplicativo no futuro, pois não conheço nenhum programa que faça o mesmo. Por exemplo, ocorreu-me que poderia ter uma interface gráfica em zenidade e poder escolher as aplicações que queremos priorizar no uso da largura de banda (navegador web, gerenciador de atualização, transferência de arquivos, etc.) e os diferentes valores de referência. Sim, é um tanto ambicioso, mas bastante útil.

Você pode baixar o script no colar. Muito obrigado por ler !!


Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: Miguel Ángel Gatón
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.

  1.   elav. dito

    Oh! Interessante 😀

    1.    eliotime3000 dito

      No canto inferior esquerdo, você tem a opção de limitar a largura de banda que a transmissão consome tanto no upload quanto no download. Com o Transmission não tive nenhum problema com ele.

      1.    biscoito dito

        Mas isso é automático, e também há Transmissão sem uma interface gráfica, então você pode não ter essa função tão disponível.

      2.    Joaquin dito

        Oi, como vai.
        Sim, eu já sei disso. Mas é exatamente isso que não quero fazer.
        Tenho um plano de internet muito pobre (512 KB e é o melhor na minha área).

        Com meu script, não me preocupo em fazer tudo manualmente. Imagine que você abre uma página no navegador e o Transmission está ocupando toda a largura de banda naquele momento, então a página demora um pouco para carregar (no máximo 1 ′, mas é exasperante). Estou cansado de "ativar limites de tempo" a cada dois minutos. Isso é automático e quase instantâneo (verifica o KB enviado e recebido pelo Firefox a cada 5 segundos).

        Realmente no meu caso com aquela velocidade de internet, é excelente. Também não conheço outro aplicativo que faça isso, caso contrário, não teria feito. Os que vi apenas limitam a largura de banda, mas não automaticamente.

        Espero ter sido claro. Obrigado pela leitura!

        1.    Joaquin dito

          Desculpa eu estava errado. Eles não são 512 KB, mas sim Kbits. (Ou seja, 1/2 "Mega"). O máximo que posso baixar é de 75 KB / se 50 KB / s de upload. Isso quando a Internet está bem, caso contrário, o normal é 48 e 23.

    2.    Joaquin dito

      Thanks!

  2.   biscoito dito

    Interessante, eu uso qBittorrent e uso o switch para limites.

    A postagem fica bem com essas cores 😉

    1.    Joaquin dito

      Obrigado pelas cores. Não sou muito bom nisso, parece muito longo e monótono com tanto texto.

  3.   jorge dito

    Pessoalmente, eu uso o transmissão-daemon e o firefox com uma guia de aplicativo ao vivo, então eu não saio por aí com programas externos ou me esquecendo de continuar os torrents ou a tartaruga ativada (e eu posso controlar isso do meu telefone). Para iniciar um serviço, adicione um usuário (por exemplo: adduser –disabled-password nethogs), crie um arquivo de texto para o daemon em /etc/init.d com um nome (por exemplo: nethogs-daemon) e então em debian type "update -rc.d nethogs-daemon defaults "para que seja inicializado sozinho.

    O arquivo de texto também é um script bash, no qual você pode mesclar seu script.
    Veja se isso pode ajudá-lo, pode ser usado para iniciar o daemon de transmissão, pode ser usado para iniciar nethogs https://trac.transmissionbt.com/wiki/Scripts/initd

    1.    Joaquin dito

      Olá!
      Veja se entendi: isso é para iniciar a transmissão na inicialização e pará-la ao desligar ou reiniciar. Com isso não tenho problemas, pois sempre inicia sozinho e inicia o download (adicionei aos aplicativos na inicialização do Xfce).

      Meu problema é que se ao colocar o script no rc.local ou no init.d não sei como o computador para o script. Ou seja, obviamente ao desligar / reiniciar o PC, todos os processos são encerrados (e com eles Transmission e Nethogs também) mas não sei o que aconteceria com meu script.

      E por que isso me incomoda? O script cria um arquivo em / tmp e controla a velocidade de transmissão. Se eu executá-lo em um terminal e pará-lo repentinamente (por exemplo, com CTRL + c), o script antes de fechar restaura as velocidades padrão (caso seja necessário) e então para o Nethogs e exclui o arquivo de / tmp. Tentei torná-lo o mais "profissional" possível para não deixar nenhum arquivo ou processo em segundo plano solto.

      Sobre o que você disse, não entendi o que é "guia de aplicativo ao vivo".

      1.    jorge dito

        Uma guia de aplicativo é uma guia permanente, está sempre aberta e minimizada dentro do firefox http://i.imgur.com/a5i0aP3.png (menu contextual na guia, clique em «colar guia»). Quando os daemons enviam o sinal TERM, eles esperam um pouco, até depois de fazer o logout, e salvam seus dados. Observe que no link que forneci antes, ao sair do script, chama start-stop-daemon e diz para a transmissão parar, aí você pode colar "killall nethogs" e o que ele contém StopScript. O script de inicialização, neste caso, você teria que chamá-lo de root em vez de um usuário específico, pois ele precisa de privilégios.

        1.    Joaquin dito

          Bem, obrigado pela dica. Assim que tenho tempo eu tento!

  4.   Facundo dito

    ótimo, me deparei com esse inconveniente, pois mesmo tendo uma conexão rápida, você é forçado a limitar a transmissão enquanto deseja navegar e, assim, "perder" tempo.
    Vou tentar quando puder. Saudações e obrigado !!

    1.    Joaquin dito

      Graças à você! Espero que sirva!

      1.    Facundo dito

        Olá de novo Joaquin. Vejo que você está tendo o cuidado de responder a todos os comentários, então vou aproveitar isso e fazer algumas perguntas de novato.
        Primeiro, como posso saber se tenho o script "awk" instalado? Eu uso o Debian 7.2.
        Em segundo lugar, não sei o que fazer com o código de colagem. Tenho que pegar um editor de texto e salvá-lo em um arquivo chamado "bandwidth-controller.sh" e executá-lo como "./band-width-control.sh". Esta é a parte em que estou mais perdido.
        Terceiro: Quando você diz para executá-lo como root, é necessário mudar de usuário para root ou é suficiente com sudo?

        Se você tiver alguma leitura que me recomende sobre o assunto, agradeço.
        Saudações!

  5.   moela dito

    É por isso que eu sempre desinstalo o Transmission e instalo o Deluge. Bem, por isso e um pouco mais que o Dilúvio me oferece que o outro não traz.

    1.    Joaquin dito

      Olá, não conheço o Dilúvio. Meu principal problema é o serviço de internet. Com isso eu aperto ao máximo.

  6.   panda dito

    Oi. minha largura de banda também é limitada, então tentei este script. Mas não está funcionando. o erro parece estar no comando nethogs -t. ele retorna o erro "Aguardando a chegada do primeiro pacote (veja o bug 1019381 do sourceforge.net)" e eu tentei mint, archlinux e nada. O que esse comando deve retornar? Suponho que devo imprimir em texto simples a largura de banda usada por cada aplicativo. Você conhece outro programa que permite ouvir a rede?

    1.    Joaquin dito

      Oi, como vai.
      Esse é um bug do Nethogs. Também me parece, mas funciona mesmo assim.

      O que o Nethogs faz é mostrar os processos que consomem mais largura de banda, em tempo real. No script, sua saída é salva em um arquivo de texto "net.list", para que possa ser filtrada posteriormente.

      O script funciona apenas com Transmission (um cliente BitTorrent) e Firefox (navegador da web). O que ele faz é limitar a largura de banda da transmissão quando o Firefox está carregando uma página da web. Você precisa instalar: Nethogs, Transmission, Transmission-remote e Firefox.

      Está tudo explicado no post, então não sei qual é o seu problema.

      PS: Escreva corretamente e melhore a ortografia. É um comentário, não uma mensagem de texto.

      1.    panda dito

        o script não funciona para mim. imprime essa mensagem de erro muitas vezes. execute "nethogs -t" em um terminal para ver o que ele faz, mas não imprime nada, apenas o erro. no meu pc não está funcionando. Imagino que deva imprimir algo semelhante ao que imprime quando executado sem o -t, mostrando os processos e a largura de banda. mas no meu caso não imprime nada disso. qual distro você usou para desenvolver o script?

        1.    Joaquin dito

          Se você olhar de perto, o post contém todos os softwares usados ​​e suas versões. Não sei por que o erro, mas ele aparece para mim toda vez que "nethogs -t" é executado. No script isso vai acontecer a cada 2 ″.

          Pode ser que quando você executa nethogs, não há nenhum processo usando a rede e, portanto, você não obtém nenhuma saída.

          O script deve ser executado como root porque o nethogs precisa desse usuário para funcionar.

          agora me lembrei de algo importante e sei por que não funciona para você:

          VOCÊ DEVE EDITAR o script e alterar o nome do usuário normal. No script é chamado de "joaquin". Você deve alterá-lo para o nome de seu usuário.

          Desculpe não ter percebido isso, deveria ter colocado o nome em uma variável. O que acontece é que não pensei em generalizar, só queria mostrar para vocês para que vejam e quem quiser tenha ideias de como fazer. Não fiz com a intenção de que funcionasse em qualquer computador, isso leva tempo e não sei programar, algumas coisas acontecem comigo.

          Boa sorte, pergunte de novo. E por favor leia a postagem e os comentários do roteiro novamente.

  7.   Facundo dito

    Olá Joaquín, diga-me o seguinte:

    transmissão remota: (http://localhost:9091/transmission/rpc/) Não foi possível conectar ao servidor
    ioctl falhou ao estabelecer o IP local para o dispositivo selecionado eth0. Você pode especificar o dispositivo na linha de comando.

    alguma ideia?? obrigado!

    1.    Joaquin dito

      Oi, como vai.
      Com licença, mas eu não tenho ideia 😀
      Pelo que entendi o erro diz, é um problema com ioctl, mas não sei o que é.

      Talvez você possa tentar interromper o script e ver se a transmissão remota funciona com algumas de suas opções (leia sua página de manual com o comando "man").