【问题标题】: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
      

      【讨论】:

      • 很好的解决方案@MarcoCaberletti。
      【解决方案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 在服务器重新启动时安排任务。 请按照以下步骤操作:

        1. 下载 crontab

          #apt-get install 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

        【讨论】:

          【解决方案5】:

          如果您是从 bash 运行,则使用“&”连接两个 jar 命令,如下所示。

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

          【讨论】:

            【解决方案6】:

            优惠券服务

            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。

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

            【讨论】:

              猜你喜欢
              • 2020-03-14
              • 2023-04-05
              • 2018-08-15
              • 1970-01-01
              • 2016-01-21
              • 2022-06-18
              • 1970-01-01
              • 1970-01-01
              • 2011-06-01
              相关资源
              最近更新 更多