首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >启动时不运行EC2程序的AWS实例

启动时不运行EC2程序的AWS实例
EN

Stack Overflow用户
提问于 2018-03-24 02:35:01
回答 2查看 1.2K关注 0票数 0

我的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上接收响应。

代码语言:javascript
运行
复制
cd /home/ec2-user/559/
java -jar response_server.jar & java -jar server.jar

但是,我希望这两个程序从启动EC2实例开始。因此,我将它们作为用户数据的一部分添加:

代码语言:javascript
运行
复制
#! /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实例时不启动。在启动实例后,我检查端口是否打开,并发现端口没有处于侦听状态。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-24 03:45:18

您不必将jar文件放入用户日期。首先,您必须创建一个脚本。您可以为每个jar文件创建一个脚本。对于response_server.jar,您可以像这样创建脚本java_response_server_launch.sh:

代码语言:javascript
运行
复制
#! /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目录下,然后使用以下命令:

代码语言:javascript
运行
复制
update-rc.d java_response_server_launch.sh defaults

还不要忘记chmod +x脚本。

有关这方面的更多信息,您可以参考

在Linux上创建Java守护进程服务的工具

在启动时在Linux实例上运行命令

票数 0
EN

Stack Overflow用户

发布于 2018-03-24 06:00:45

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49460653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档