You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AWS EC2实例上实现两个Java jar包开机自动启动?

问题根因

你当前遇到的问题核心是rc.local为串行执行逻辑,直接书写的java -jar命令默认是前台阻塞运行的,执行到第一条启动命令后会一直等待该进程退出,永远不会执行后续的第二条命令,因此第二个服务无法启动。

解决方案

方案1:快速修复rc.local配置

给两条启动命令追加后台运行标识&,同时补充绝对路径、日志重定向配置即可:

# 请替换为你自己的jar包实际路径和日志存储路径
java -jar /data/app/first-service.jar > /var/log/first-service.log 2>&1 &
java -jar /data/app/second-service.jar > /var/log/second-service.log 2>&1 &

注意事项:

  • 必须写jar包的绝对路径,rc.local执行时默认工作目录为根目录,相对路径会导致找不到jar包
  • 执行前先确认rc.local有可执行权限,没有的话执行sudo chmod +x /etc/rc.local开启

方案2(更推荐):使用systemd管理服务

rc.local是老旧的兼容启动机制,更建议用系统自带的systemd管理Spring Boot服务,支持开机自启、异常自动重启、统一日志管理等能力,配置步骤如下:

  1. 给第一个服务创建配置文件/etc/systemd/system/first.service,内容示例:
[Unit]
Description=First Spring Boot Microservice
After=network.target

[Service]
# 替换为你EC2的实际运行用户,比如ec2-user、ubuntu
User=ec2-user
# 替换为jar包所在的目录绝对路径
WorkingDirectory=/data/app
ExecStart=/usr/bin/java -jar first-service.jar
# 异常退出自动重启
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
  1. 同理给第二个服务创建配置文件/etc/systemd/system/second.service,修改对应描述和jar包名称即可
  2. 执行命令生效配置并开启自启:
# 重载systemd配置
sudo systemctl daemon-reload
# 开启两个服务的开机自启
sudo systemctl enable first.service second.service
# 立即启动两个服务
sudo systemctl start first.service second.service

后续排查日志可直接用journalctl -u first.service -f查看对应服务的实时运行日志。

内容的提问来源于stack exchange,提问作者elvis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 10:24:08