Aguardando conexão antes de lançar aplicativos

Deixe sua contribuição, assim vamos facilitar a manutenção e configuração para outros membros que estão iniciando.
Regras do fórum Leia as Regras Gerais do Manjaro Brasil em "Normatividade" e pesquise antes de postar.

Aguardando conexão antes de lançar aplicativos

Mensagempor chmercesmoreira » 06 Nov 2016, 12:52  •  MS 1

Essa dica serve para atrasar o lançamento de todos os aplicativos que exigem conexão com a internet para funcionarem corretamente, fazendo com que eles não iniciem até o sistema se conectar a internet.

A motivação para essa dica é que alguns aplicativos podem não funcionar corretamente se no momento em que forem iniciados não existir conexão ativa com a internet.

Exemplos de aplicativos que agem dessa forma:


A abordagem que eu estava tomando antes para tentar resolver esse problema era a explicada nesse tópico do fórum: -t4386.html

Basicamente eu fazia com que os programas que precisavam de conexão com internet na inicialização "dormissem" por alguns segundos, aguardando um certo tempo predeterminado antes de inicializarem.

O problema dessa abordagem é que não é possível determinar de antemão quanto tempo é necessário aguardar até a conexão com a internet ficar ativa, eu tentava algo em torno de 5s~10s, mas mesmo assim de vez em quando a conexão demorava mais do que isso para ficar ativa e então os aplicativos eram iniciados sem conexão com a internet e o problema continuava.

A nova solução é simples, usando a ferramenta nativa do sistema chamada ping: http://man7.org/linux/man-pages/man8/pi ... %A0PACKETS
posso testar se a conexão com a internet está ativa e ficar aguardando até a mesma ocorrer com sucesso, após isso basta chamar todos os aplicativos que dependem da conexão com a internet.
A dica foi baseada nessa resposta: http://serverfault.com/questions/42021/ ... t-is-known

Para colocar isso em prática, crie um script no diretório /usr/bin com o nome que você desejar, eu decidi chamá-lo waitConnection.sh, utilize o comando abaixo para criar o arquivo com as permissões corretas:
Código: Selecionar todos
sudo install -b -m 755 /dev/null /usr/bin/waitConnection.sh

Agora edite o arquivo com o seguinte conteúdo:
Código: Selecionar todos
#!/bin/bash
while ! ping -c1 www.google.com &>/dev/null; do sleep 5; done


Explicação:
Basicamente esse é um loop que testa a cada 5 segundos se a conexão com a internet está ativa, ele fica fazendo isso até a conexão com a internet ficar ativa.

Agora basta você sempre executar esse script antes de todos os programas que precisam de conexão com internet ativa no momento da inicialização, exemplo:

Imagem

Repare no comando que usei:
Código: Selecionar todos
bash -c "/usr/bin/waitConnection.sh && /usr/bin/thunderbird &"

Explicação: Basicamente o comando /usr/bin/thunderbird só será executado após o comando /usr/bin/waitConnection.sh terminar, ou seja, o programa Thunderbird não será executado até a conexão com a internet ficar ativa.

@edit
Uma outra dica, passei a centralizar todos os aplicativos que necessitam de internet na inicialização em um único arquivo de inicialização:
Imagem
Código: Selecionar todos
bash -c "/usr/bin/waitConnection.sh && (/usr/bin/thunderbird & /opt/rambox/Rambox & dropbox & pamac-tray &) &"

Dessa maneira existem 3 vantagens:
  • Mais fácil de manter pois todas as alterações são feitas em apenas um local.
  • Maior desempenho, pois apenas 1 processo waitConnection.sh vai ficar executando, ao invés de múltiplos para cada aplicativo que fica aguardando conexão.
  • Esse é um bônus, só fui perceber agora, no momento da inicialização, se o seu computador não estiver conectado a internet, a inicialização ocorre muito mais rapidamente, pois apenas os aplicativos essenciais são carregados, descartando aqueles que não funcionam sem conexão com internet ativa, foi por esse motivo que decidi adicionar o pamac-tray a listagem.

@edit2
Tive relatos de um usuário que não conseguiu fazer com que o comando ping reconhecesse a sua conexão com internet, se você estiver nesse grupo então utilize o seguinte conteúdo para o arquivo waitConnection.sh:
Código: Selecionar todos
#!/bin/bash
while ! wget -q --spider www.google.com &>/dev/null; do sleep 5; done
Editado pela última vez por chmercesmoreira em 15 Nov 2016, 20:18, em um total de 9 vezes.
Razão: Correção
Imagem Imagem

Esta mensagem de chmercesmoreira foi agradecido - 2
Holmes (07 Nov 2016, 05:28) • tioguda (07 Nov 2016, 22:36)
chmercesmoreira
Especial

 
Mensagens: 751
Artigos: 1
Registro: 31 Jan 2016, 10:58
Agradeceu: 15 vez(es)
Agradecido: 223 vez(es)
Distro utilizada: Manjaro
Versão: 2018
Ambiente: KDE
Repositório: Stable
Habilidade: Intermediate

Aguardando conexão antes de lançar aplicativos

Mensagempor Holmes » 07 Nov 2016, 05:29  •  MS 2

ooooooooooooooooo
@chmercesmoreira, parabéns pelo tutorial e vou implementar aqui!

vlw fwi, Holmes :)
Imagem

Meu Blog Kibojoe I Manjaro I JWM I Outras Coisas...

Visitem e colaborem com nosso Knowledge Base
Leia as Regras Gerais e pesquise antes de postar
Se a sua dúvida foi respondida marque Resolvido em seu tópico com o botão V na cor verde
Avatar do usuário
Holmes
Fundador

Mantenedor Kibojoe Linux
Mantenedor Kibojoe Linux
 
Mensagens: 5472
Artigos: 56
Registro: 30 Set 2012, 21:00
Localização: Brasil
Agradeceu: 173 vez(es)
Agradecido: 812 vez(es)
Distro utilizada: Kibojoe Linux
Versão: 18.02
Ambiente: JWM
Repositório: Stable
Habilidade: Intermediate

Aguardando conexão antes de lançar aplicativos

Mensagempor Jean Michel Kowalski » 07 Nov 2016, 07:02  •  MS 3

Essa dica é sensacional, testarei aqui na minha máquina.
Muito obrigado por compartilhar :D
"I see you on the dark side of the moon..." :roll:

Linux Counter #606350

Imagem
Avatar do usuário
Jean Michel Kowalski
Moderador

 
Mensagens: 717
Registro: 19 Mai 2016, 08:57
Agradeceu: 18 vez(es)
Agradecido: 117 vez(es)
Distro utilizada: Manjaro
Versão: 17.1
Ambiente: KDE
Repositório: Stable
Habilidade: Novice

Aguardando conexão antes de lançar aplicativos

Mensagempor tioguda » 07 Nov 2016, 22:41  •  MS 4

Isso vai ajudar muito aqui,uso wifi e as vezes ela demora conectar.
Tinha que atrasar muito alguns aplicativos para não dar erro de conexão.
Valeu pelo compartilhamento.
A Administração do site requer que você seja registrado e faça o login para ver a mensagem.
Avatar do usuário
tioguda
Avançado

 
Mensagens: 311
Artigos: 1
Registro: 28 Fev 2016, 22:42
Localização: Paraná
Agradeceu: 20 vez(es)
Agradecido: 82 vez(es)
Distro utilizada: Manjaro Linux
Versão: XanMod
Ambiente: KDE/Gnome
Repositório: Stable/Testing
Habilidade: Intermediário

Aguardando conexão antes de lançar aplicativos

Mensagempor chmercesmoreira » 07 Nov 2016, 22:58  •  MS 5

Uma outra dica, passei a centralizar todos os aplicativos que necessitam de internet na inicialização em um único arquivo de inicialização:
Imagem
Código: Selecionar todos
bash -c "/usr/bin/waitConnection.sh && (/usr/bin/thunderbird & /opt/rambox/Rambox & dropbox & pamac-tray &) &"

Dessa maneira existem 3 vantagens:
  • Mais fácil de manter pois todas as alterações são feitas em apenas um local.
  • Maior desempenho, pois apenas 1 processo waitConnection.sh vai ficar executando, ao invés de múltiplos para cada aplicativo que fica aguardando conexão.
  • Esse é um bônus, só fui perceber agora, no momento da inicialização, se o seu computador não estiver conectado a internet, a inicialização ocorre muito mais rapidamente, pois apenas os aplicativos essenciais são carregados, descartando aqueles que não funcionam sem conexão com internet ativa, foi por esse motivo que decidi adicionar o pamac-tray a listagem.
Editado pela última vez por chmercesmoreira em 07 Nov 2016, 23:02, em um total de 1 vez.
Razão: Correção
Imagem Imagem
chmercesmoreira
Especial

 
Mensagens: 751
Artigos: 1
Registro: 31 Jan 2016, 10:58
Agradeceu: 15 vez(es)
Agradecido: 223 vez(es)
Distro utilizada: Manjaro
Versão: 2018
Ambiente: KDE
Repositório: Stable
Habilidade: Intermediate


Voltar para Dicas, Truques e Astúcias



Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 3 visitantes

^ Voltar ao Topo