用户数据脚本在Amazon Linux ec2启动时启动Spring Boot应用程序启动

问题描述:

我在寻求一些特别针对AWS的帮助,并在Amazon Linux ec2实例启动时运行脚本。这是一个定制的AMI映像,但是Amazon Linux机器,只是安装了Java,Maven,Gradle。用户数据脚本在Amazon Linux ec2启动时启动Spring Boot应用程序启动

我现在遇到的问题是,我想让容纳我的Spring Boot应用程序的ec2实例在每次启动/启动时自动启动端口8080上的Tomcat服务器。理想情况下,这意味着当我通过AWS启动实例时,服务器已经在运行,无需我自己SSH进入实例以运行命令。我相信在实例设置中添加“用户数据”可以解决这个问题,但似乎该脚本在启动时并未执行。在init.d文件中也没有产生日志,表明用户数据曾经运行,或者当我将输出传送到txt文件时创建的任何文件。如果有人有过类似的经历,我很乐意提供一些关于如何解决这个问题的建议。

我加载到我的“用户数据”的脚本是文本:

#!/bin/bash 
cd ~/java-service-tier 
./gradlew clean build 
java -jar build/libs/<myApp>.jar 

其中<myApp>是作为构建命令而产生的我的应用程序的jar文件。

我的项目使用Spring Boot中的中间层Java服务应用程序与Amazon RDS上托管的MySQL数据库进行交互。这是用Gradle构建的。然后是一个Web层层,它与服务层进行对话以发出数据请求,并根据服务层响应来操作Angular中的前端。架构设置是健全的,并不是一个问题,但我想我会给出一些背景,以防它是相关的。

避免使用相对路径和特定于shell的变量。脚本是否期望设置某些环境变量?

<full-path-to-home>/java-service-tier/gradlew clean build 
java -jar <full-path>/build/libs/<myApp>.jar 
+0

感谢您的建议。我更改了用户数据脚本以反映这些更改。仍然不会在实例启动时执行。该脚本需要设置JAVA_HOME,但无需将其设置为在ec2实例的SSH会话期间已经完成。 – bang

+0

不需要。您必须在脚本中导出JAVA_HOME。你理解错了。您的登录会话脚本都不会被执行。不要做任何假设。最好让脚本自成一体。不是每次都要启动实例来测试,而是使用'curl'或'ec2metadata'获取你的userdata,并在没有设置变量的shell中测试它(受限制的环境) – helloV

+0

我现在通过在顶端使用#cloud-boothook我的用户数据条目。我对此的理解是,它会使用户数据按照我的意愿执行每次启动。我假设问题是停止/启动服务器并不构成“启动”,因此从未执行脚本。就设置环境变量而言,这对于将来的脚本编制很有用。感谢您的帮助。 – bang