나는 여전히 bash에서 스크립팅을 처음 접했고 기본 사항이라고 생각한 것을 시도했습니다. Ubuntu 14.04를 실행하는 서버에서 업데이트되는 DDNS를 실행하고 싶습니다.
dnsimple에서 일부 코드를 빌려서, 지금까지 내가 가진 것입니다.
#!/bin/bash
LOGIN="email"
TOKEN="token"
DOMAIN_ID="domain"
RECORD_ID="record"
IP=`curl -s http://icanhazip.com/`
OUTPUT=`
curl -H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-DNSimple-Domain-Token: $TOKEN" \
-X "PUT" \
-i "https://api.dnsimple.com/v1/domains/$DOMAIN_ID/records/$RECORD_ID" \
-d "{\"record\":{\"content\":\"$IP\"}}"`
if ! echo "$OUTPUT" | grep -q "(Status:\s200)"; then
echo "match"
$(echo "$OUTPUT" | grep -oP '(?<="message":")(.[^"]*)' >> /home/ddns/ddns.log)
$(echo "$OUTPUT"| grep -P '(Status:\s[0-9]{3}\s)' >> /home/ddns/ddns.log)
fi
아이디어는 5 분마다 실행되며 cronjob을 사용하여 작업하고 있다는 것입니다. 그런 다음 컬의 출력을 확인하여 상태가 "200"인지 확인하십시오. 그것이 다른 것이라면 출력을 파일에 저장하고 싶습니다.
내가 일할 수없는 것은 if진술입니다. 내가 이해하는 것처럼 -qon grep명령은 if명령문에 대한 종료 코드를 제공합니다 . 그러나 나는 그것을 작동시키지 못하는 것 같습니다. 내가 어디 잘못 갔어?
약간 수정했습니다. 변수를
—
CircularRecursion
DNSimple-Domain-Token필요로하지 않는를 사용하고 LOGIN있습니다.
내가 당신이라면, 인터넷 네트워크 인터페이스가 cron에서 5 분마다가 아닌 올라갈 때만 이것을 실행합니다. 또는 적어도 어딘가에 파일에 "$ IP"를 캐시
—
cas
/var/tmp/icanhazip하고 마지막 실행 이후에 변경되지 않은 경우 exit 0다른 작업을 수행하기 전에 수행하십시오. IP 주소가 변경 될 때만 5 분마다 DDNS 항목을 업데이트 할 필요는 없습니다.
좋은 생각-나는 그것을 추가하기 위해 노력할 것입니다.
—
CircularRecursion 8
if검사 를 제거 하고 항상 로그 파일에 에코 하면 스크립트가 작동합니까 ? dnssimple의 쇼는$LOGIN전에$TOKEN,하지만 당신은 그것을 놓치고있어. 어쩌면 그게 일이 실패했을까요?