我的EC2实例中有两个Java程序,它是在一个公共子网中启动的。这些程序存储在/home/ec2-user/559文件夹下,作为名为response_server.jar和server.jar的jar文件。server.jar文件正在侦听端口5000以与客户端对话,而response_server.jar正在侦听端口6000。ELB被配置为在端口6000上ping EC2实例以进行健康检查,因此response_server.jar用于在端口6000 (主要用于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实例是不健康的,除非我手动运行jar文件以检查端口6000上的运行状态。
我无法理解为什么java程序在使用启动脚本重新启动EC2实例时不启动。在启动实例后,我检查端口是否打开,并发现端口没有处于侦听状态。
任何帮助都会有很大帮助!
发布于 2018-03-24 03:45:18
您不必将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脚本。
有关这方面的更多信息,您可以参考
发布于 2018-03-24 06:00:45
让AWS使用Java平台:https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/java-se-platform.html为您做这件事
https://stackoverflow.com/questions/49460653
复制相似问题