인터넷 연결을 확인할 수 있을 만큼 시스템 스크립트를 기다리게 하려면 어떻게 해야 합니까?

인터넷 연결을 확인할 수 있을 만큼 시스템 스크립트를 기다리게 하려면 어떻게 해야 합니까?

일회성 시스템 서비스로 만든 스크립트가 있습니다. 이것은 라즈베리 파이에서 실행되며 요점은 인터넷에 연결할 수 없는 경우 Wi-Fi 어댑터(?)를 재구성하여 임시 네트워크를 생성하고 재부팅한다는 것입니다.

제가 겪고 있는 문제는 확인할 때 아직 IP 주소를 받지 못해 연결할 수 없다고 생각한다는 것입니다.

After=매개변수를 사용해 보았지만 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

편집하다

제가 사용하고 있는 OS는 다음과 같습니다.Linux raspberrypi 4.1.7+ #817 PREEMPT Sat Sep 19 15:25:36 BST 2015 armv6l GNU/Linux

답변1

해결책 중 하나는 ifupdowndebian 백포트를 사용하여 패키지를 더 높은 버전(>= 0.8.9)으로 업데이트하는 것입니다(I생각하다이것은 raspberian에서 작동해야 합니다), 한 번 보세요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대신 사용하는 것입니다.

관련 정보