AWS EC2用户数据脚本无法正常工作。

4
当我通过SSH登录到我的EC2实例并运行以下命令时,我的SpringServer.jar文件会执行,并且我可以通过访问myawsaccount:8080/times来访问我的Spring应用程序。但是当我在用户数据中指定以下命令时,我无法访问myawsaccount:8080/times上的应用程序,我不知道原因。任何帮助将不胜感激。
命令
#!/bin/bash --> only in user script
    sudo su

wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.rpm

yum install -y jdk-8u141-linux-x64.rpm

wget https://myawsaccount.s3-eu-west-1.amazonaws.com/SpringServer-1-0.0.1-SNAPSHOT.jar

java -jar SpringServer-1-0.0.1-SNAPSHOT.jar
2个回答

11
为了解决UserData问题,最好的方法是登录到实例并检查其中一个UserData日志文件。
最重要的是/var/log/cloud-init-output.log
引导程序输出日志文件(/var/log/cloud-init-output.log)捕获了控制台输出,因此如果实例的行为与您预期不符,则很容易调试脚本。
此外,您的UserData脚本将位于/var/lib/cloud/instances/<instance-id>/中。因此,一旦进入实例,您可以手动尝试运行它并在实例内修复/调试。

1
是的...在以root身份登录后,sudo cat命令有效。谢谢。 - KahunaDub
似乎无法执行用户数据文件。我看到它更新了依赖项,然后提供了一些网络设备信息,并以amzn2运行“modules:config”结束.... - KahunaDub
@KahunaDub 这个正确吗 #!/bin/bash --> only in user script?你的 UserData 里真的有 --> only in user script 吗? - Marcin
1
很抱歉,@KahunaDub。UserData只在启动新实例时执行一次。当您停止/启动或重新启动现有实例时,它不会运行。为此,您可以考虑将脚本放在实例的systemd控制下。 - Marcin
@KahunaDub 是的,该链接包含有关UserData如何工作的有用信息。 - Marcin
显示剩余6条评论

3

在用户数据中使用 export 设置环境变量无效,因为它只会将其设置为当前 shell 会话。您可以通过将它们复制到您的配置文件中来解决此问题:

#!/bin/bash

...

echo 'export JAVA_HOME=/opt/jdk1.8.0_141' >> /etc/profile
echo 'export JRE_HOME=/opt/jdk1.8.0_141/jre' >> /etc/profile
echo 'export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin' >> /etc/profile

...

这样,环境变量将在每个会话中都可用。


谁给我的回答点了踩,感谢你让我知道有问题。我可能是没有理解问题或者我的回答是错误的。你介意告诉我其中哪一个吗?我很愿意学习并修复我的回答中存在的任何问题。 - Dennis Traub
1
你得到了我的点赞。最让人烦恼的事情是没有解释地被踩。而你的回答可能是解决方案,或其中的一部分。 - Marcin
1
批评总是比创造容易。只要原帖作者(以及未来阅读此问题的任何其他人)解决了他们的问题,我就满意了。我并不真正需要这些积分。 - Dennis Traub
1
是的,我同意。但是没有解释就进行负评并不对任何人有用。给你点踩的人可能会误解问题或者你的回答。没有评论,就没有机会澄清或纠正它。 - Marcin
1
谢谢,这个答案也有帮助,但是被采纳的答案解决了我的问题。 - KahunaDub

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接