티스토리 뷰

DNSEVER의 DDNS는 wget 명령어를 통해서 이뤄진다.

crontab으로 반복적으로 실행될 쉘 스크립트를 만든다.


위치는 상관없다.

/opt/home/admin/ddns.sh도 괜찮고

/etc/storage/ddns.sh도 괜찮다.


명령어는


#!/bin/sh

wget --quiet --output-document=/opt/home/admin/ddns.txt --http-passwd=인증키 'http://dyna.dnsever.com/update.?host[도메인]'


로 하면 된다. 위는 기본 명령어고 아래는 /opt/home/admin/ddns.txt에 로그를 보겠다는 것이다. 사실 이 단계에서 로그는 크게 의미가 없긴 하다. 걍 ddns.sh를 실행해 보면 아이피가 업데이트 되는지 아닌지로 문제를 알 수 있으니까...


그 다음, 이걸 crontab에 등록한다. 여기에 따르면, 공유기가 시작되서 처음 로딩하는 명령어를 담고 있는 스크립트 /etc/storage/started_script.sh 를 열어서 아래와 같이 추가하면 된다.


################# user crontabs create ###################
# if app not exist
       
if [ ! -f /usr/sbin/crond ]; then
           
exit 0
       
fi
       
if [ -n "`pidof crond`" ] ; then
               
# stop daemon
        killall
-q crond
       
fi
# create /var/spool/cron/crontabs directory
       
if [ ! -d /var/spool/cron/crontabs ]; then
                mkdir
-p /var/spool/cron
                cd
/var/spool/cron
                mkdir
-p /var/spool/cron/crontabs
       
fi
       
Login=`nvram get http_username`
       
        touch
/var/spool/cron/crontabs/$Login
        echo
"SHELL=/bin/sh" > /var/spool/cron/crontabs/$Login
        echo
"MAILTO=""" >> /var/spool/cron/crontabs/$Login
        echo
"HOME=/" >> /var/spool/cron/crontabs/$Login
       
echo "(자신의 시간 설정) * * * * * /etc/storage/ddns.sh" >> /var/spool/cron/crontabs/$Login
       
/usr/sbin/crond -l 0 -L /var/log/cron.log
##########################################################


그냥 이렇게 하면 절대로 자동 실행이 안되는데 꽤 오랫동안 고생하다가 /var/log/cron.log를 분석해서 알아냈다. 원인은 built-in wget (/usr/bin/wget)와 optware를 이용해서 설치한 wget (/opt/bin/wget)가 다르다는 것에 있다. 처음에 공유기가 부팅되었을 때는 환경 변수가 로딩이 안되서인지 뭔지 몰라도 무조건 built-in wget를 통해서 ddns.sh 명령어를 수행한다. 그런데 --http 옵션이 built-in wget에는 없다. 아마 가장 기본적인 wget인가보다. 그러므로 USB 포트에 메모리를 넣고 optware를 깐 다음에 추가로 설치한 wget를 사용해야 정상적으로 ddns.sh가 실행이 된다.


그러니까 맨 처음의 박스에 있는 명령어는 wget가 /opt/bin/wget로 고쳐야 정상적으로 ddns.sh가 실행되고 crontab과 cron 데몬도 문제없이 실행된다.


참고로 optware나 entware의 wget가 아닌 기본 busybox의 바이너리로 동작하게 하고 싶다면 다음과 같이 스크립트를 쓰면 된다.


wget --quiet --output-document=/etc/storage/ddns.log "http://유저명:인증키@dyna.dnsever.com/update.php?host[도메인]"


실행 권한과 저장은 아래와 같이 하면 된다.


chomod 755 /etc/storage/ddns.sh

mtd_storage.sh save



아래는 참고할 내용들!


vi 명령어

dd 한줄 지우기

yy로 한줄 복사 후 P로 붙여넣기

#은 당연히 주석

:wq 저장하고 끝내기

:q! 저장하지 않고 끝내기

ESC 편집모드에서 명령 모드로

i 편집모드로


chmod

777은 rwxrwxrwx

755는 rwxr-xr-x

644는 rw-r--r--



끝!

댓글
댓글쓰기 폼