
我有一個腳本,已將其製作成一次性系統服務。它在樹莓派上運行,重點是如果它無法連接到互聯網,它會重新配置 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
編輯:另一個選擇可能是使用