如何在 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 在服务器重启时安排任务。
按照以下步骤操作:
下载crontab
#apt-get 安装 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
我推荐使用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
优惠券服务
- 运行命令'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。
注意:两个服务应该有不同的端口。
我正在学习在 AWS EC2 上部署 Spring 启动应用程序。而且我知道如何自动启动应用程序,当我启动 EC2 实例时,我不需要手动使用命令 java -jar java-service.jar,我只需添加此命令在 /etc/rc.local 文件中,仅此而已。但是我有 2 个微服务,我想自动启动它们,但是如果我尝试在 /etc/rc.local 中添加这两个命令它不起作用,只有第一个服务会启动,第二个服务不会启动. 所以我添加了这样的命令:
在我启动 EC2 实例后,仅启动了第一个服务:
谢谢!
我不确定您在启动应用程序时使用的是哪个系统: 对于 linux 基本系统,您可以使用 crontab 在服务器重启时安排任务。 按照以下步骤操作:
下载crontab
#apt-get 安装 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
我推荐使用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
优惠券服务
- 运行命令'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。
注意:两个服务应该有不同的端口。