검색 엔진의 방문이 늘어나고 있군...

Posted
Filed under 쉘 스크립트
참조 원문 : Linux: Using Remote Wakeup (Wake on LAN)
관련 글 : [시스템] 리눅스에서 WoL 작동시키기

  뭐, 가치가 있는 포스팅인지 모르겠으나 재미있어 보여서 일단 질러봅니다. 대략 아래와 같은 시나리오입니다.

  "재택 근무자들을 위해 WoL용 리눅스 서버를 만들려고 한다. 재택 근무자들은 이 서버를 통해 회사에 있는 자신의 컴퓨터를 부팅할 수 있다. 재택 근무자들은 리눅스에 대해 모르기 때문에 당신은 Putty 같은 클라이언트 프로그램과 그에 맞는 접속 세션 정보가 담긴 파일을 제공하여 쉽게 서버로 접속할 수 있게 해야 한다. 재택 근무자들이 서버에 접속 후 'wol'이라는 이름의 스크립트를 실행하여 원하는 컴퓨터를 킬 수 있게 할 것이다."

  뭐, 별도로 서버를 하나 세워야 한다는 측면에서 이미 상당히 의미 없어보이는 시나리오지만 어쨌든 아이디어 자체는 재미있어 보입니다. 일단 이 일을 실현할 'wol'이라는 스크립트 파일의 내용은 아래와 같습니다.
#!/bin/bash
clear
wolmenu="wol.menu"
woldata="wol.data"
wolloc="`dirname \"$0\"`/"
if [ ! -f $wolloc$wolmenu ]
then
     echo Cannot find my menu file. My files should be in $wolloc.
     elif [ ! -f $wolloc$woldata ]
     then
          echo Cannot find my data file. My files should be in $wolloc.
     else
          cat $wolloc$wolmenu
          echo;echo Type the number of the PC to awaken or c to cancel and press Enter:
          read n
          case $n in
               c) exit;
               ;;
               C) exit;
               ;;
               *) echo Waking up `grep ^$n $wolloc$wolmenu`.;
               ipsubnet=`grep ^$n $wolloc$woldata|cut -d ' ' -f 3`;
               hwaddress=`grep ^$n $wolloc$woldata|cut -d ' ' -f 2`;
               echo The command running is - wakeonlan -i $ipsubnet $hwaddress;
               wakeonlan -i $ipsubnet $hwaddress;
               ;;
     esac
fi
  작가 스스로도 시인했듯이 스크립트가 상당히 허접합니다. 입력 값 검사 같은 루틴이 전혀 없고 WoL이 성공했는지 핑 같은 것으로 검사하는 루틴도 없습니다. 뭐, 그건 넘어가자고 하니 넘어갑시다.

  스크립트를 살짝쿵 훑어봤다면 wol.menu와 wol.data라는 파일이 별도로 사용된다는 것을 알 수 있습니다. 이름에서도 알 수 있지만 wol.menu 파일은 이 wol이라는 스크립트를 실행했을 때 메뉴로 출력할 일반 텍스트 파일이라는 것을 알 수 있습니다. 대충 내용은 아래와 같이 작성하면 되겠죠.
Number PC Name             HW Address         IP Address
====== =================== ================== ================
1      ACCOUNTING          00:11:22:33:44:50  192.168.1.10
2      FINANCE             00:11:22:33:44:51  192.168.1.11
3      MANAGER             00:11:22:33:44:52  192.168.1.12
  wol.data 파일은 실제 WoL의 대상이 될 머신의 MAC 주소와 해당 서브넷의 브로드캐스트 주소를 담을 파일입니다. 내용은 아래와 같은 형식입니다.
1 00:11:22:33:44:50 192.168.1.255
2 00:11:22:33:44:51 192.168.1.255
3 00:11:22:33:44:52 192.168.1.255
  스크립트 파일의 내용을 봤을 때 대충 어떻게 돌아가는지 바로 파악이 되실겁니다. 출력된 메뉴를 보고 번호를 누르면 wol.data 파일에서 해당 번호를 찾아 대상 서브넷의 대상 MAC 주소를 향해 매직 패킷을 날리는 것이죠. 좀 개조하면 wol.data 파일이 필요 없겠군요. 브로드캐스트 주소 때문에 많이 개조해야 할라나...



  이거 말고도 아래와 같은 시나리오도 있군요.

  "월요일~금요일에 한하여 06:30에 특정 컴퓨터들이 켜지게 만들고 싶다. 출근해서 부팅하기 귀찮거든."

  ...좀 어이없지만 어쨌든 아이디어는 재미있습니다. 켜지게 만들려는 컴퓨터들이 있는 서브넷에 항상 켜 있는 리눅스 컴퓨터가 있다면 cron에 아래와 같은 엔트리를 집어넣어 쉽게 위 시나리오를 해결할 수 있습니다.
30 6 * * 1-5 wakeonlan -i 192.168.1.255 -f /home/user/scripts/autowol.data
  물론 IP는 적절히 자신의 서브넷에 맞는 브로드캐스트 주소로 적절히 고쳐야겠죠? 안타깝지만 여기서도 별도의 파일을 사용해야 합니다. 위에서 autowol.data라는 파일을 사용하고 있는데 WoL의 대상 MAC 주소를 담고 있는 파일로 내용은 아래와 같습니다.
00:11:22:33:44:50
00:11:22:33:44:51
00:11:22:33:44:52
00:11:22:33:44:53
00:11:22:33:44:54

  지금까지 쓸데없어 보이는 WoL 스크립트 예제에 대해 살펴봤습니다. 근데 또 모르죠. 설마 이런 스크립트가 필요한 날이 언젠가 올지도...

2010/10/29 20:08 2010/10/29 20:08