【问题标题】:How to automatically start 2 Java jars on AWS EC2?如何在 AWS EC2 上自动启动 2 个 Java jar?
【发布时间】:2021-12-09 04:17:27
【问题描述】:
我正在学习在 AWS EC2 上部署 Spring Boot 应用程序。而且我知道如何自动启动应用程序,当我启动 EC2 实例时,我不需要手动使用命令 java -jar java-service.jar,我只需将此命令添加到 /etc/rc.local 文件中并就这些。但是我有 2 个微服务,我想自动启动它们,但是如果我尝试在 /etc/rc.local 中添加这两个命令它不起作用,只有第一个服务会启动,第二个服务不会启动。
所以我添加了这样的命令:
在我启动 EC2 实例后,只启动第一个服务:
谢谢!
【问题讨论】:
标签:
java
linux
amazon-web-services
amazon-ec2
jar
【解决方案1】:
我不是 unix 专家,但我看到从终端运行 2 个 java 命令的唯一问题是,除非第一个命令返回,否则不会执行下一个命令。所以,我认为解决方案是在某种交互模式下运行第一个命令,以便可以同时执行其他命令。
在 unix shell 中有一些方法可以在后台运行命令。我找到了这个有用的链接 - https://www.maketecheasier.com/run-bash-commands-background-linux/
在 bash 终端中,可以通过附加& 使命令在后台运行。所以,我认为如果你做类似的事情,你应该能够启动两个 jar -
java -jar /home/ec2-user/first.jar &
java -jar /home/ec2-user/second.jar
【解决方案2】:
我推荐使用 Systemd。
为每个微服务创建一个 Systemd 单元文件,保存在/etc/systemd/system/my-app.service。类似的东西:
[Unit]
Description=My Java app
After=syslog.target network.target
[Service]
EnvironmentFile=/etc/sysconfig/my-app-env
WorkingDirectory=/my/app/home
ExecStart=/usr/bin/java $JAVA_OPTS -jar my-app.jar
KillMode=process
User=my-app-user
Restart=on-failure
[Install]
WantedBy=multi-user.target
然后,运行:
systemctl daemon-reload
systemctl enable --now my-app
之后,您可以使用:
systemctl status my-app
systemctl stop my-app
systemctl start my-app
【解决方案3】:
另一个解决方案是将您的 jar 包捆绑到 Docker 映像中。这当然需要 Docker 运行时并增加了开销,但它也有一些好处:
- jar 文件的完全分离。轻松使用不同的 java 版本。
- 无需担心本地和 ec2 环境的差异。
- 轻松扩展到 3 个或更多罐子。
- 使用 Docker Cli 构建和启动容器。在 Devops 管道中运行良好。
您可以阅读here 了解如何创建 Spring Boot Docker 镜像。构建映像后。你这样开始。:
docker run -p 8080:8080 springio/gs-spring-boot-docker
您可以一个接一个地运行所需数量的 docker run 命令。
【解决方案4】:
我不确定您在启动应用程序时使用的是哪个系统:
对于 linux 基本系统,您可以使用 crontab 在服务器重新启动时安排任务。
请按照以下步骤操作:
-
下载 crontab
#apt-get install cron
-
编辑文件文件以启用任务
crontab -e
(选择 Vim 或 nano 来编辑任务)
-
将此代码添加到您的服务器
@reboot /usr/bin/java -jar XXXXX.jar
-
保存文件
-
检查结果
crontab -l
#systemctl status cron
此方法适用于我的 Debian 系统。更多详情,您可以参考
How to automatically run program on Linux startup
【解决方案5】:
如果您是从 bash 运行,则使用“&”连接两个 jar 命令,如下所示。
java -jar /home/ec2-user/first.jar&java -jar /home/ec2-user/second.jar
【解决方案6】:
优惠券服务
- 运行命令“java -jar /home/ec2-user/coupon-service-0.0.1-SNAPSHOT.JAR”
- 按 CTRL+Z,输入 bg,按 Enter,输入 disown,按 Enter。
产品服务
- 运行命令“java -jar /home/ec2-user/product-service-0.0.1-SNAPSHOT.JAR”
- 按 CTRL+Z,输入 bg,按 Enter,输入 disown,按 Enter。
注意:两个服务应该有不同的端口。