일회성 시스템 서비스로 만든 스크립트가 있습니다. 라즈베리파이에서 실행되는데, 인터넷에 연결할 수 없으면 WiFi 어댑터(?)를 재구성하여 임시 네트워크를 만들고 재부팅한다는 점이 포인트입니다.
내가 겪고 있는 문제는 확인할 때 아직 IP 주소를 받지 못했기 때문에 연결할 수 없다고 생각한다는 것입니다.
After=
be 매개변수를 사용해 보았지만 아무것도 변경하지 않았습니다. 스크립트 자체에 명령을 도입하려고 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
편집하다
제가 사용하고 있는 운영체제는 다음과 같습니다.Linux raspberrypi 4.1.7+ #817 PREEMPT Sat Sep 19 15:25:36 BST 2015 armv6l GNU/Linux
답변1
한 가지 해결책은 ifupdown
debian 백포트를 사용하는 것입니다(I생각하다이것은 Raspberry Pi에서 작동해야 합니다), 한 번 보세요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
편집: 또 다른 옵션은 다음과 같습니다.