尝试使用脚本更新 Amazon Route53,但域未更新

尝试使用脚本更新 Amazon Route53,但域未更新

我有几个运行 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 文本文件(例如脚本)是行序列,每行(甚至最后一行)必须以换行符终止。

大多数现代 unix 工具都可以处理格式错误的文本文件,但 tcsh 不算现代:它看起来忽略了最后一个未终止的逻辑行(最后一个换行符之后的所有内容,前面没有反斜杠)。

cat /path/to/script一个好的编辑器(例如 Emacs 或 Vi(m))会自动确保 csh 脚本以换行符结束。在下一个提示上方显示最后一个脚本行,而不是在它旁边)。

1 在一个非常好的编辑器中,例如 Emacs,这不适用于可能合法地不以换行符终止的其他类型的文件。

相关内容