Como posso ter um script systemd esperando o suficiente para verificar uma conexão com a Internet?

3

Eu tenho um script que eu fiz em um serviço systemd. Isso é executado em um pi de framboesa e o ponto é que se ele não puder se conectar à internet, ele reconfigura o adaptador wifi (?) Para criar uma rede ad hoc e reinicializar.

O problema que estou enfrentando é que, quando verifica, ainda não recebeu um endereço IP e, portanto, acha que não pode se conectar.

Eu tentei usar o parâmetro After= como network-online.target , mas isso não mudou nada e tentei introduzir um comando sleep no próprio script, mas novamente sem alteração.

Alguma idéia?

Este é o script check_connection.sh :

INTERFACE_NAME=$(iwconfig 2>/dev/null | grep -o "^\w*")

sleep 5;

if ifconfig $INTERFACE_NAME | grep -q "inet addr"
then
    echo 'connected'
    # if connected check if it's ad hoc mode or not
    if iwconfig $INTERFACE_NAME | grep -q "Mode:Ad-Hoc"
    then
        echo 'start dhcp server'
        # if running in ad hoc mode make sure server starts
        sudo service isc-dhcp-server start
    fi
else
    echo 'not connected'
    # if not connected switch settings to ad hoc and reboot
    sudo cp /etc/network/interfaces-adhoc /etc/network/interfaces
    sudo reboot
fi

/etc/systemd/system/check_connection.service:

[Unit]
Description=Check whether connected at startup
After=network-online.target

[Service]
User=root
ExecStart=/bin/bash /home/pi/check_connection.sh

[Install]
WantedBy=multi-user.target

EDITAR

O sistema operacional que estou executando é: Linux raspberrypi 4.1.7+ #817 PREEMPT Sat Sep 19 15:25:36 BST 2015 armv6l GNU/Linux

    
por evan54 18.12.2016 / 22:30

1 resposta

0

Uma das soluções seria atualizar o pacote ifupdown para uma versão superior (> = 0.8.9) usando os backports do Debian (acho que isso deve funcionar no raspberian), dê uma olhada no link . Você precisa atualizar o pacote ifupdown .

O que está acontecendo aqui é que o network-online.target não está fazendo nenhum serviço e isso significa que ele é considerado "iniciado" sem esperar nada. Com a versão mais recente do ifupdown , o arquivo networking.service contém as linhas a seguir, o que significa que o network-online.target aguardará até que seja totalmente iniciado:

[Install]
WantedBy=multi-user.target
WantedBy=network-online.target

EDIT: Outra opção poderia ser usar o After=networking.service

    
por 19.12.2016 / 19:09