【问题标题】:AWS EC2 instance not running Java program when launchingAWS EC2 实例在启动时未运行 Java 程序
【发布时间】:2018-03-24 14:00:45
【问题描述】:

我的 EC2 实例中有两个 Java 程序,它们在公共子网中启动。这些程序作为 jar 文件存储在 /home/ec2-user/559 文件夹下,名为 response_server.jar 和 server.jar。 server.jar 文件正在侦听端口 5000 以与客户端通信,并且 response_server.jar 正在侦听端口 6000 。 ELB 配置为在端口 6000 上 ping EC2 实例以进行健康检查,因此 response_server.jar 用于在端口 6000 上 ping 时返回随机响应(主要用于 ELB)

我有两个问题:

第一期: 当我 ssh 进入 EC2 实例并手动运行 jar 文件时 使用下面的命令,它们按预期工作,我的客户端程序在端口 5000 和 6000 上都收到响应。

cd /home/ec2-user/559/
java -jar response_server.jar & java -jar server.jar

但是,我希望这两个程序从 EC2 实例的启动开始。因此,我将它们添加为我的用户数据的一部分:

#! /bin/bash
java -jar /home/ec2-user/559/response_server.jar & 
java -jar /home/ec2-user/559/server.jar &

现在,如果我连接客户端程序,我会收到连接被拒绝的错误消息。除非我在 ssh 会话中手动运行它们,否则它不会连接。

第二期: 与第一个问题有关,我的 ELB 将此 EC2 实例显示为不健康,除非我手动运行 ELB 的 jar 文件以检查端口 6000 上的健康状态。

我无法弄清楚为什么在使用启动脚本时重新启动 EC2 实例时 java 程序没有启动。启动实例后检查端口是否打开,发现端口未处于侦听状态。

任何帮助都会有很大帮助!

【问题讨论】:

    标签: java amazon-web-services amazon-ec2 launch


    【解决方案1】:

    您不必将 jar 文件放入您的用户日期。首先,您必须创建一个脚本。您可以为每个 jar 文件创建一个脚本。对于 response_server.jar,您可以像这样创建脚本 java_response_server_launch.sh:

    #! /usr/bin/sh
    
    PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
    JAVA=/usr/bin/java
    MY_SERVER=/home/ec2-user/559/response_server.jar & 
    USER=your_username
    /bin/su - $USER -c "$JAVA -jar $MY_SERVER &"
    

    把你的脚本放到/etc/init.d目录下,然后使用命令:

    update-rc.d java_response_server_launch.sh defaults
    

    别忘了 chmod +x 脚本。

    更多内容可以参考

    Tool for creating a Java daemon service on Linux

    Running Commands on Your Linux Instance at Launch

    【讨论】:

    • 感谢您的意见。我现在就测试一下
    • 经过测试,如果符合您的预期,请标记为答案,以便其他用户受益。参考What does it mean when an answer is "accepted"?
    • 哦,谢谢你告诉我,你的建议有帮助!我现在将其标记为已回答.. 也感谢您调用 chmod +x ,这非常有帮助!
    • 看来我的名声不够高,公开反映我已经接受了答案!
    • 要接受您不需要声誉的答案。您可以接受任何最适合您问题的答案。希望How does accepting an answer work? 有所帮助。
    【解决方案2】:

    让 AWS Elastic Beanstalk 使用 Java SE 平台为您做到这一点: https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/java-se-platform.html

    【讨论】:

    • 谢谢你的意见,我也试试这个:)
    最近更新 更多