systemd スクリプトがインターネットへの接続を確認するのに十分な待機時間を設定するにはどうすればよいでしょうか?

systemd スクリプトがインターネットへの接続を確認するのに十分な待機時間を設定するにはどうすればよいでしょうか?

私はワンショット systemd サービスに作成したスクリプトを持っています。これは Raspberry Pi 上で実行され、インターネットに接続できない場合は Wi-Fi アダプター (?) を再構成してアドホック ネットワークを作成し、再起動するという点がポイントです。

私が経験している問題は、チェック時に IP アドレスをまだ受信していないため、接続できないと判断されることです。

After=パラメータを使用しようとしました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

編集

私が実行している OS は次のとおりです:Linux raspberrypi 4.1.7+ #817 PREEMPT Sat Sep 19 15:25:36 BST 2015 armv6l GNU/Linux

答え1

解決策の1つは、ifupdownDebianバックポート(I考えるこれはラズベリーパイでも動作するはずです。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編集:代わりに別のオプションを使用することもできます

関連情報