启动时 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
让 AWS Elastic Beanstalk 使用 Java SE 平台为您做这件事:
https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/java-se-platform.html
我的 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
让 AWS Elastic Beanstalk 使用 Java SE 平台为您做这件事: https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/java-se-platform.html