2015년 4월 2일 목요일

라즈베리 파이에서 무선랜 연결이 끊어지면 자동으로 리부팅 시키기

라즈베리 파이를 사용하다 보면 무선랜 연결이 종종 끊어지곤 한다. 네트웍 연결이 끊어져 버리면 원격지에 라즈베리 파이를 놓고 사용하기가 힘들어진다. 그래서 네트웍 연결이 끊어졌는지 확인해서, 끊어진 경우 시스템을 리부팅 시키는 방법을 소개한다.



먼저 아래의 내용을 /usr/local/bin/checkwifi.sh 이라는 이름으로 저장해 준다.

$ cat /usr/local/bin/checkwifi.sh
ping -c4 192.168.1.1 > /dev/null
if [ $? != 0]
then
sudo /sbin/shutdown -r now
fi
$

물론 위에서 노란색 부분의 IP 주소는 자신의 공유기 IP 주소(또는 로컬 네트웍 상에 항상 켜져 있는 장비의 IP주소)로 바꿔줘야 한다.  그리고 저 파일의 퍼미션을 변경해 주는걸 잊으면 안된다.

$ sudo chmod 775 /usr/local/bin/checkwifi.sh
$

이제 checkwifi.sh 스크립트를 실행하면 네트웍 연결을 확인해 끊어졌으면 시스템을 리부팅 시키게 된다.

네트웍 상태를 확인해 시스템을 리부팅 시키는 스크립트는 만들었지만, 시스템에서 주기적으로 저 스크립트를 실행해 주도록 해 줘야 한다. 여기서는 cron 을 이용한다.

crontab을 수정해야 하므로 'crontab -e' 명령을 입력해 crontab 에디터를 연 다음, 아래 줄을 추가하고 저장해준다.

*/5 * * * * /usr/bin/sudo -H /usr/local/bin/checkwifi.sh >> /dev/null 2>&1

위의 줄은 cron이 checkwifi.sh 스크립트를 매 5분마다 sudo로 실행하게 해 설정해주는 것이다.

이제 시스템을 리부팅 한 후 테스트를 위해 일부러 무선랜 연결을 끊어보면 몇분 후 시스템이 리부팅 되는걸 확인할 수 있을 것이다.

리부팅 대신 네트웍만 재시동하기

네트웍 연결이 끊어졌을 때 리부팅은 시간이 많이 걸리기 때문에 단지 네트웍만 재시동하기를 원하는 경우는 checkwifi.sh 파일 내용을 다음과 같이 바꿔주면 된다.

cat /usr/local/bin/checkwifi.sh
ping -c4 192.168.1.1 > /dev/null
if [ $? != 0]
then
echo "No network connection, restarting wlan0"
/sbin/ifdown 'wlan0'
sleep 5
/sbin/ifup 'wlan0'
fi
$


댓글 없음:

댓글 쓰기