インターネット接続を確認するためにシステムスクリプトを十分な時間待機させる方法は?

インターネット接続を確認するためにシステムスクリプトを十分な時間待機させる方法は?

ワンタイムシステムサービスで作成されたスクリプトがあります。ラズベリーファイで実行されますが、インターネットに接続できない場合は、WiFiアダプタ(?)を再構成して一時的なネットワークを作成して再起動することがポイントです。

私が経験している問題は、確認するときにまだ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

1つの解決策はifupdowndebianバックポートを使用することです(I考えるこれはRaspberry Piで動作するはずです)、一度見てくださいhttps://backports.debian.org/Instructions/。その後、パッケージを更新する必要がありますifupdown

ここで何が起こるのかは、network-online.targetサービスがプールされないことです。つまり、サービスが「開始」されたと見なされ、実際には何も待たないことを意味します。ifupdown最新バージョンのファイルには、networking.service次の行が含まれています。つまり、network-online.targetフルブートになるまで待つ必要があります。

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

After=networking.service編集:別のオプションは次のとおりです。

関連情報