启动时AWS EC2实例未运行Java程序

时间:2018-03-24 02:35:01

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

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

我有两个问题:

第一期: 当我进入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程序没有启动。我检查了在启动实例后端口是否打开并发现端口未处于侦听状态。

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

2 个答案:

答案 0 :(得分:0)

您不必将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

答案 1 :(得分:0)

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