Как заставить скрипт systemd подождать достаточно времени, чтобы проверить подключение к Интернету?

Как заставить скрипт systemd подождать достаточно времени, чтобы проверить подключение к Интернету?

У меня есть скрипт, который я сделал в виде oneshot systemd service. Он работает на raspberry pi, и суть в том, что если он не может подключиться к интернету, он перенастраивает адаптер wifi (?) для создания сети ad hoc и перезагружается.

Проблема, с которой я столкнулся, заключается в том, что при проверке он еще не получил IP-адрес и поэтому думает, что не может подключиться.

Я попробовал использовать After=параметр be network-online.target, но это ничего не изменило, и я попробовал ввести sleepкоманду в сам скрипт, но снова никаких изменений.

Есть идеи?

Вот сценарий 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

РЕДАКТИРОВАТЬ

Операционная система, на которой я работаю:Linux raspberrypi 4.1.7+ #817 PREEMPT Sat Sep 19 15:25:36 BST 2015 armv6l GNU/Linux

решение1

Одним из решений было бы обновление ifupdownпакета до более высокой версии (>= 0.8.9) с помощью Debian Backports (Iдуматьэто должно работать на raspberian), посмотрите наhttps://backports.debian.org/Instructions/. Затем вам необходимо обновить ifupdownпакет.

Здесь происходит то, что network-online.targetне тянет ни одну службу, и это означает, что он считается "запущенным" без фактического ожидания чего-либо. С новой версией файла, ifupdownсодержащей networking.serviceследующие строки, это означает, что он заставит network-online.targetждать, пока он полностью не запустится:

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

EDIT: Другим вариантом может быть использование After=networking.serviceвместо

Связанный контент