我的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程序没有启动。我检查了在启动实例后端口是否打开并发现端口未处于侦听状态。
任何帮助都会有很大的帮助!
答案 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脚本。
有关此内容的更多信息,请参阅
答案 1 :(得分:0)
让AWS Elastic Beanstalk使用Java SE平台为您做到这一点: https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/java-se-platform.html