如何讓 systemd 腳本等待足夠的時間檢查網路連線?

如何讓 systemd 腳本等待足夠的時間檢查網路連線?

我有一個腳本,已將其製作成一次性系統服務。它在樹莓派上運行,重點是如果它無法連接到互聯網,它會重新配置 WiFi 適配器(?)以建立臨時網路並重新啟動。

我遇到的問題是,當它檢查時尚未收到 IP 位址,因此認為它無法連接。

我嘗試使用After=參數 benetwork-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使用 debian 向後移植(我思考這應該適用於樹莓派),看看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編輯:另一個選擇可能是使用

相關內容