如何让 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编辑:另一种选择可能是使用

相关内容