Ubuntu 10.04를 실행하는 Amazon EC2 인스턴스가 여러 개 있는데, 여기서 Amazon Route53을 사용하고 싶습니다. Shlomo Swidler가 설명한 대로 스크립트를 설정했습니다.기사, 하지만 아직 부족한 점이 있습니다.
스크립트가 실행되면 출력이 반환되지 않습니다. 처음에는 스크립트가 올바르게 실행되고 있다는 뜻이라고 생각했습니다. 그러나 다음을 사용하여 DNS 레코드를 확인하면MyR53DNS, 내 인스턴스에 항목이 없습니다. 이것은 내 스크립트입니다.
#!/bin/tcsh -f
set root=`dirname $0`
setenv EC2_HOME /usr/lib/ec2-api-tools
setenv EC2_CERT /etc/cron.route53/ec2_x509_cert.pem
setenv EC2_PRIVATE_KEY /etc/cron.route53/ec2_x509_private.pem
setenv AWS_ACCESS_KEY_ID myaccesskeyid
setenv AWS_SECRET_ACCESS_KEY myaccesskey
/usr/bin/ec2-describe-instances | \
perl -ne '/^INSTANCE\s+(i-\S+).*?(\S+\.amazonaws\.com)/ \
and do { $dns = $2; print "$1 $dns\n" }; /^TAG.+\sShortName\s+(\S+)/ \
and print "$1 $dns\n"' | \
perl -ane 'print "$F[0] CNAME $F[1] --replace\n"' | \
xargs -n 4 /etc/cron.route53/cli53/cli53.py \
rrcreate -x 60 mydomain.com
이 스크립트에서 문제를 발견한 사람이 있나요? 스크립트가 아닌 경우 내 Route53 도메인 업데이트를 방해하는 또 다른 요인은 무엇입니까?
보안 그룹을 사용하여 인스턴스의 IP를 제한하고 있습니다. 포트 53을 열려고 시도했지만 아무런 효과가 없는 것 같습니다. Route53은 다른 포트를 사용합니까?
Unix 및 Linux 커뮤니티에서 제공할 수 있는 도움이나 지침에 진심으로 감사드립니다. 추가 정보가 필요하면 알려주시기 바랍니다.
결과는 다음과 같습니다. tcsh -f -x /etc/cron.route53/aws-route53.sh
set root=`dirname $0`
dirname /etc/cron.route53/aws-route53.sh
setenv EC2_HOME /usr/lib/ec2-api-tools
setenv EC2_CERT /etc/cron.route53/ec2_x509_cert.pem
setenv EC2_PRIVATE_KEY /etc/cron.route53/ec2_x509_private.pem
setenv AWS_ACCESS_KEY_ID myaccesskeyid
setenv AWS_SECRET_ACCESS_KEY myaccesskey
마지막 7줄의 주석 처리 여부에 관계없이 동일한 출력을 받습니다.
> cat -A /etc/cron.route53/aws-route53.sh
#!/bin/tcsh -f$
$
set root=`dirname $0`$
setenv EC2_HOME /usr/lib/ec2-api-tools$
setenv EC2_CERT /etc/cron.route53/ec2_x509_cert.pem$
setenv EC2_PRIVATE_KEY /etc/cron.route53/ec2_x509_private.pem$
setenv AWS_ACCESS_KEY_ID myaccesskeyid$
setenv AWS_SECRET_ACCESS_KEY myaccesskey$
$
/usr/bin/ec2-describe-instances | \$
perl -ne '/^INSTANCE\s+(i-\S+).*?(\S+\.amazonaws\.com)/ \$
and do { $dns = $2; print "$1 $dns\n" }; /^TAG.+\sShortName\s+(\S+)/ \$
and print "$1 $dns\n"' | \$
perl -ane 'print "$F[0] CNAME $F[1] --replace\n"' | \$
xargs -n 4 /etc/cron.route53/cli53/cli53.py \$
rrcreate -x 60 mydomain.com
> cat /etc/cron.route53/aws-route53.sh
#!/bin/tcsh -f
set root=`dirname $0`
setenv EC2_HOME /usr/lib/ec2-api-tools
setenv EC2_CERT /etc/cron.route53/ec2_x509_cert.pem
setenv EC2_PRIVATE_KEY /etc/cron.route53/ec2_x509_private.pem
setenv AWS_ACCESS_KEY_ID myaccesskeyid
setenv AWS_SECRET_ACCESS_KEY myaccesskey
/usr/bin/ec2-describe-instances | \
perl -ne '/^INSTANCE\s+(i-\S+).*?(\S+\.amazonaws\.com)/ \
and do { $dns = $2; print "$1 $dns\n" }; /^TAG.+\sShortName\s+(\S+)/ \
and print "$1 $dns\n"' | \
perl -ane 'print "$F[0] CNAME $F[1] --replace\n"' | \
xargs -n 4 /etc/cron.route53/cli53/cli53.py \
rrcreate -x 60 mydomain.com
답변1
아하! 스크립트 끝에 개행 문자가 없습니다. Unix 텍스트 파일(예: 스크립트)은 일련의 줄이며 각 줄(마지막 줄도 포함)은 개행 문자로 끝나야 합니다.
대부분의 최신 유닉스 도구는 잘못된 형식의 텍스트 파일을 처리할 수 있지만 tcsh는 최신과는 거리가 멀습니다. 종료되지 않은 마지막 논리 줄(앞의 백슬래시가 없는 마지막 개행 문자 다음의 모든 내용)을 무시하는 것처럼 보입니다.
cat /path/to/script
좋은 편집기(예: Emacs 또는 Vi(m))는 자동으로 csh 스크립트가 줄바꿈으로 끝나는지 확인합니다. 다음 프롬프트 옆이 아닌, 다음 프롬프트 위에 마지막 스크립트 줄을 표시합니다.
1 Emacs와 같은 정말 좋은 편집기에서는 합법적으로 새 줄로 끝나지 않는 다른 유형의 파일에서는 작동하지 않습니다.