我有一个脚本,已将其制作成一次性系统服务。它在树莓派上运行,重点是如果它无法连接到互联网,它会重新配置 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
编辑:另一种选择可能是使用