如何在 AWS EC2 上自动启动 2 Java 个 jar?

How to automatically start 2 Java jars on AWS EC2?

我正在学习在 AWS EC2 上部署 Spring 启动应用程序。而且我知道如何自动启动应用程序,当我启动 EC2 实例时,我不需要手动使用命令 java -jar java-service.jar,我只需添加此命令在 /etc/rc.local 文件中,仅此而已。但是我有 2 个微服务,我想自动启动它们,但是如果我尝试在 /etc/rc.local 中添加这两个命令它不起作用,只有第一个服务会启动,第二个服务不会启动. 所以我添加了这样的命令:

在我启动 EC2 实例后,仅启动了第一个服务:

谢谢!

我不确定您在启动应用程序时使用的是哪个系统: 对于 linux 基本系统,您可以使用 crontab 在服务器重启时安排任务。 按照以下步骤操作:

  1. 下载crontab

    #apt-get 安装 cron

  2. 编辑文件文件以启用任务

    crontab -e

    (选择Vim或nano来编辑任务)

  3. 将此代码添加到您的服务器

    @reboot /usr/bin/java -jar XXXXX.jar

  4. 保存文件

  5. 检查结果

    crontab -l #systemctl status cron

这个方法适用于我的Debian系统。更多详情,您可以参考 How to automatically run program on Linux startup

我推荐使用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

我不是 unix 专家,但我看到来自终端的 运行ning 2 java 命令中的唯一问题是,除非第一个命令 returns,否则下一个命令是未执行。所以,我认为解决方案是 运行 在某些交互模式下的第一个命令,以便可以同时执行其他命令。

在 unix 中有一些方法 shell 可以在后台 运行 命令。我发现这很有用 link - https://www.maketecheasier.com/run-bash-commands-background-linux/

在 bash 终端中,可以在后台向 运行 发送命令,方法是在命令后附加 &。所以,我认为如果你做类似 -

的事情,你应该能够启动两个罐子
java -jar /home/ec2-user/first.jar &
java -jar /home/ec2-user/second.jar

另一种解决方案是将您的罐子捆绑到 Docker 图像中。这当然需要 Docker 运行时间并增加开销,但它也有一些好处:

  • jar文件完全分离。轻松使用不同的 java 版本。
  • 无需担心本地和ec2环境的差异。
  • 轻松扩展到 3 个或更多罐子。
  • 使用 Docker CLI 构建和启动容器。在 Devops 管道中表现出色。

您可以阅读 here 以了解如何创建 Spring 启动 Docker 映像。构建图像后。你这样开始吧:

docker run -p 8080:8080 springio/gs-spring-boot-docker

您可以 运行 一个接一个地执行您需要的 docker 运行 个命令。

如果你是 运行 来自 bash,那么像下面这样用“&”连接两个 jar 命令。

java -jar /home/ec2-user/first.jar&java -jar /home/ec2-user/second.jar

优惠券服务

  1. 运行命令'java -jar /home/ec2-user/coupon-service-0.0.1-SNAPSHOT.JAR'
  2. 按 CTRL+Z,输入 bg,按 Enter,输入 disown,按 Enter。

产品服务

  1. 运行命令'java -jar /home/ec2-user/product-service-0.0.1-SNAPSHOT.JAR'
  2. 按 CTRL+Z,输入 bg,按 Enter,输入 disown,按 Enter。

注意:两个服务应该有不同的端口。