首页 文章

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

提问于
浏览
0

我的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上ping(主要用于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实例显示为不 Health ,除非我手动运行ELB的jar文件以检查端口6000上的运行状况 .

我无法弄清楚为什么在使用启动脚本时重启EC2实例时java程序没有启动 . 我检查了启动实例后端口是否打开,并发现端口未处于侦听状态 .

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

2 回答

  • 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

  • 0

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

相关问题