나는 여전히 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
진술입니다. 내가 이해하는 것처럼 -q
on 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
,하지만 당신은 그것을 놓치고있어. 어쩌면 그게 일이 실패했을까요?