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

AWS EC2 instance not running Java program when launching

我的 EC2 实例中有两个 Java 程序,它们在 public 子网中启动。这些程序作为名为 response_server.jar 和 server.jar 的 jar 文件存储在 /home/ec2-user/559 文件夹下。 server.jar 文件正在侦听端口 5000 以与客户端通信,response_server.jar 正在侦听端口 6000。 ELB 配置为 ping 端口 6000 上的 EC2 实例以进行健康检查,因此 response_server.jar 用于 return 在端口 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 程序没有启动。启动实例后查看端口是否打开,发现端口未处于监听状态。

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

您不必将 jar 文件放入 user-date。首先你必须创建一个脚本。您可以为每个 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

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