Como executar um script, dependendo da conexão com a internet

44

Costumo montar uma unidade remota usando o sshfs. Eu adoraria ter essa montagem automaticamente. No entanto, se eu montá-lo no meu .bashrc ou scripts de inicialização, a montagem muitas vezes falha porque minha conexão de internet sem fio ainda não foi feita.

Alguém sabe de uma maneira fácil de executar um script de bash toda vez que a conexão é feita, ou para montar automaticamente uma unidade sshfs?

    
por jmite 20.02.2013 / 04:48

6 respostas

50

Adicione seu script a /etc/network/if-up.d/ . Nomeie seu script sem uma extensão '.sh'.

Além disso, depois de adicionar a execução do script chmod +x /etc/network/if-up.d/yourscriptname para dar a permissão necessária.

Certifique-se de que a interface de rede (por exemplo, wlan0 ou eth0) que deve acionar seu script quando ativada seja mencionada no arquivo /etc/network/interfaces .

    
por dedunumax 20.02.2013 / 05:00
25

Nota do editor: Cuttlefish não foi atualizado desde 2012 e não está em nenhum repositório atual do Ubuntu

Ubuntu 12.04

  • Instale o Choco : uma ferramenta simples, que realiza reflexos no seu computador, executando ações quando eventos específicos são acionados.
  • Abra o Cuttlefish e clique em Novo .

    • DêumnomeaeleealtereaopçãoAtivadoporestímuloparaON.
    • CliqueemEstímulo,selecioneacategoriaRedeedigiteConectaràWLAN.CliqueemOK.

    • VocêtambémpodeselecionaroSSIDdaredesemfioetemaopçãodeverificarissonainicialização.

    • Agoravocêteráqueespecificarumareação.VáparaaguiaReaçãoecliqueemadicionar.SelecioneAplicativosnacategoriaeInicieoaplicativo(nomodoavançado)dotipo.

    • Agora,especifiqueoscriptquevocêdesejaexecutarnaopçãoexecutável.Vocêpodeatépassarparâmetrosparaoscript.

    • Eéisso!Alémdisso,certifique-sedeadicionaroCuttlefishnosaplicativosdeinicialização.VáparaEditar>Preferênciaseativeaopçãodeinícioautomático.

por ignite 20.02.2013 / 05:19
1

A melhor maneira, simples e fácil, seria adicionar um comando up a qualquer interface na qual você queira trabalhar.

As interfaces podem ser encontradas no diretório "/ etc / network /" sob o nome de arquivo "interfaces"

iface elan0 inet manual
    up filename.sh

Isto irá adicionar o comando up para elan0. Simultaneamente, dê isso a qualquer interface que você queira trabalhar. Lembre-se de recuar um espaço de tabulação.

Certifique-se de dar as permissões de execução ao arquivo.

sudo chmod 755 filename.sh
    
por Revanth Kumar 11.03.2015 / 07:35
1

Vou responder a essa parte da pergunta do OP: "Eu adoraria ter essa montagem automaticamente"

Minha ferramenta favorita para automontagem de compartilhamentos de rede é o autofs: link

O AutoFS é a minha ferramenta de escolha para montar o meu NAS - para todos os meus laptops e estações de trabalho.

" autofs é um programa para montar diretórios automaticamente conforme a necessidade. As montagens automáticas são montadas somente quando são acessadas e são desmontadas após um período de inatividade. Por isso, a automontagem do NFS / Samba compartilhamentos conservam a largura de banda e oferecem melhor desempenho geral em comparação com montagens estáticas via fstab. "

    
por RBell 24.06.2016 / 09:10
0

No que me diz respeito, a solução /etc/network/if-up.d/ não funcionou comigo quando adicionei /etc/network/interfaces ao seguinte:

auto wlp58s0
iface wlp58s0 inet dhcp
post-up /home/augustin/Config/myscript.sh

O Wi-Fi é iniciado após a reinicialização.

Mas depois de um pouco de luta, de este link , o que funcionou foi para adicionar o script a /etc/NetworkManager/dispatcher.d/ no formulário 90myscript.sh , em que 90 é o nível de prioridade do script e com o seguinte formato:

#!/bin/bash

IF=$1
STATUS=$2

if [ "$IF" == "wlp58s0" ]
then
    case "$2" in
        up)
        # interface is up
        ;;
        down)
        # interface will be down
        ;;
        pre-up)
        # interface will be up
        ;;
        post-down)
        # interface is down
        ;;
        *)
        ;;
    esac
fi

Eu acho que existem problemas entre quem controla a configuração de rede no nível do sistema e, às vezes, o comportamento network padrão é deixado para trás do distribuidor.

Além disso, para aqueles que gostariam que - como eu - tentassem ter um link simbólico para o script (para armazenar o arquivo em um local melhor), infelizmente isso não funcionou para mim.

Espero que isso ajude!

    
por Augustin Riedinger 28.02.2018 / 13:07
0

systemd parece ter assumido a rede hoje em dia.

$ networkctl
WARNING: systemd-networkd is not running, output will be incomplete.

IDX LINK             TYPE               OPERATIONAL SETUP
  1 lo               loopback           n/a         unmanaged
  2 enp0s25          ether              n/a         unmanaged
  3 wlo1             wlan               n/a         unmanaged

3 links listed.

Também possui unidades correspondentes às interfaces

$ systemctl list-units |grep wlo1
sys-devices-pci0000:00-0000:00:1c.3-0000:24:00.0-net-wlo1.device                                                        loaded active plugged   Centrino Ultimate-N 6300 (3x3 AGN)
sys-subsystem-net-devices-wlo1.device                                                                                   loaded active plugged   Centrino Ultimate-N 6300 (3x3 AGN)

Aparentemente, você pode usá-los nos arquivos da unidade de serviço. Portanto, basta criar uma unidade de serviço para executar seu script e usar algo parecido dentro dele para executá-lo condicionalmente na rede:

BindsTo=sys-subsystem-net-devices-wlo1.device
After=sys-subsystem-net-devices-wlo1.device

Boa sorte! Eu não testei isso, então "sua milhagem pode variar".

Fontes:

por Rolf 30.03.2018 / 14:39