2016-11-15 109 views
0

我在尋求一些特別針對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中的前端。架構設置是健全的,並不是一個問題,但我想我會給出一些背景,以防它是相關的。

回答

1

避免使用相對路徑和特定於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

相關問題