본문 바로가기

리눅스

라즈베리파이 와이파이 네트워크 이유 없이 끊길 때 자동 부활 스크립트

라즈베리파이를 써보신 분들 중에 wifi 로 네트워크를 연결해 두었는데 이유없이 가끔씩 와이파이랑 연결이 끊긴 경험을 해 보신 분들이 있으실 겁니다.

 

저도 이유는 모르겠으나... 뭔가 프로세스가 돌다가 행 비슷한 현상으로 네트워크가 멈추는 것일 수도 있고 여러 요인이 있겠지요.

 

어쨌든 그 요인을 잡는건... 때에 따라선 쉬울 수도 있지만 진짜 못찾겠는 경우도 있어요.

 

저는 못찾겠는 경우여서 부활 스크립트를 만들어 심어놨습니다.

 

 

실제로 이 스크립트로 통신이 끊겼을 때 몇 분 후에 다시 통신이 되는 기적을 경험한 적이 있습니다 ㅋㅋ

 

그럼 바로 결과물인 부활 스크립트부터 공개 합니다.

 

 

network_revival.sh

#!/bin/sh

ping -q -c 1 192.168.0.1 > /dev/null

if [ $? -eq 1 ]
then
  sleep 60
  ping -q -c 1 192.168.0.1 > /dev/null
  if [ $? -eq 1 ]
  then
    sudo systemctl restart connman
    sleep 3
    ping -q -c 1 192.168.0.1 > /dev/null
    if [ $? -eq 1 ]
      then
        sudo reboot
    fi
  fi
fi

우선 본인 wifi 공유기의 주소를 알아야 합니다.

(보통 iptime 은 192.168.0.1 이 게이트웨이이자 공유기 설정을 할 수 있는 페이지 주소입니다. 다른 공유기의 경우 게이트웨이 주소가 다를 수 있으니 먼저 확인 후 해당 주소를 위 스크립트의 192.168.0.1 부분에 대체해 주셔야 합니다)

 

전 iptime 을 사용하고 게이트웨이(공유기 설정 할 수 있는 페이지의 IP) 가 192.168.0.1 이기 때문에 위 스크립트 상에 전부 이 IP 주소로 넣었습니다.

 

 

스크립트 설명을 드리자면,

 

맨 처음에 게이트웨이로 핑을 날립니다.

 

그 후 만약에 핑이 안나가면 60초를 쉬었다가 다시 핑을 날려 봅니다.

 

만약 또 핑이 안나간다 하면 connman 서비스를 재시작 합니다.

(connman 서비스는 라즈베리파이의 네트워크 서비스 이며 대개 connman 서비스 재시작으로 통신 문제가 해결 됩니다)

 

그리고 3초를 쉬고 다시 게이트웨이로 핑을 날려 봅니다.

 

만약 또 핑이 안나간다 하면 이제 라즈베리파이 서버 자체를 재부팅 합니다.

 

 

간단히 말하면 핑을 몇번 시도 해 보고 connman 서비스를 재시작 해 보고 그래도 핑이 계속 안나간다 하면 심각한 문제로 판단하여 라즈베리파이 재부팅을 하는 과정 입니다.

 

 

이 스크립트를 이제 crontab 에 등록 해 줍니다.

 

crontab -e

위 명령어로 crontab 에 들어가서,

 

*/3 * * * * /usr/script/network_revival.sh

위와 같이 3분에 한번씩 쉘이 돌아가도록 해 줍니다.

(경로는 본인이 쉘을 위치한 경로로 잡아 주시면 됩니다. 실행 될 수 있게 쉘 권한 잘 맞춰주시구요)

 

전 혹시나 부하가 많이 갈까봐 3분에 한번으로 했는데 사실 이 쉘 하나로 부하는 거의 없습니다. 따라서 매분으로 해도 무방합니다.

 

 

이제 쉘이 크론을 통해 잘 돌아간다면 와이파이가 끊길 일은.. 좀 줄어들겁니다. (그래도 통신이 끊기는 문제가 있다면... os상 행과 같은 원인이 아닌 물리적 또는 공유기 등 다른 요인의 근본적인 원인을 찾아봐야 할 수도 있습니다)

 

 

끝.