인터넷 연결을 확인하기 위해 시스템 스크립트를 충분한 시간 동안 기다리게 만드는 방법은 무엇입니까?

인터넷 연결을 확인하기 위해 시스템 스크립트를 충분한 시간 동안 기다리게 만드는 방법은 무엇입니까?

일회성 시스템 서비스로 만든 스크립트가 있습니다. 라즈베리파이에서 실행되는데, 인터넷에 연결할 수 없으면 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

한 가지 해결책은 ifupdowndebian 백포트를 사용하는 것입니다(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편집: 또 다른 옵션은 다음과 같습니다.

관련 정보