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

如何在Linux上将Quarkus原生镜像安装为非容器化系统服务

Quarkus原生镜像部署为Linux系统服务方案

一、最佳部署方式:直接通过systemd管理原生可执行文件

Quarkus原生镜像本质是静态编译的可执行文件,无需容器工具,直接用systemd管理是最简洁可靠的方案,无需额外Shell脚本中转,直接配置systemd服务文件即可:

完善后的systemd服务文件(/usr/lib/systemd/system/mycustomquarkus.service)

[Unit]
Description=自定义Quarkus应用服务
After=network.target

[Service]
# 直接指向原生可执行文件路径
ExecStart=/home/xpto/getting-started/target/getting-started-1.0.0-SNAPSHOT-runner
# 指定非root运行用户(建议创建专用用户,避免权限过大)
User=quarkus
Group=quarkus
# 进程异常退出后自动重启
Restart=always
# 重启间隔时间
RestartSec=5s
# 日志输出配置(可通过journalctl查看)
StandardOutput=journal+console
StandardError=journal+console
# 可选:设置应用工作目录
WorkingDirectory=/home/xpto/getting-started

[Install]
WantedBy=multi-user.target

配置步骤

  1. 创建专用运行用户(可选但推荐):
    sudo useradd -r -s /sbin/nologin quarkus
    
  2. 调整可执行文件权限:
    sudo chown quarkus:quarkus /home/xpto/getting-started/target/getting-started-1.0.0-SNAPSHOT-runner
    sudo chmod +x /home/xpto/getting-started/target/getting-started-1.0.0-SNAPSHOT-runner
    
  3. 启用并启动服务:
    sudo systemctl daemon-reload
    sudo systemctl enable mycustomquarkus.service
    sudo systemctl start mycustomquarkus.service
    
  4. 状态与日志查看:
    # 查看服务运行状态
    sudo systemctl status mycustomquarkus.service
    # 实时查看应用日志
    sudo journalctl -u mycustomquarkus.service -f
    

二、替代方案

  • init.d脚本:适用于不支持systemd的老版本Linux发行版,编写传统SysV init脚本实现启停,但维护成本高于systemd。
  • supervisord:第三方进程管理工具,适合同时管理多个进程的场景,需额外安装配置。
  • rc.local:将启动命令添加到/etc/rc.local(需确保文件可执行),仅适合简单场景,缺乏进程监控和自动重启能力。

三、Shell启停脚本实现(若需封装逻辑)

如果需要通过Shell脚本封装前置检查、配置加载等逻辑,可参考以下极简脚本(示例路径:/usr/local/bin/quarkus-app.sh):

#!/bin/bash
APP_PATH="/home/xpto/getting-started/target/getting-started-1.0.0-SNAPSHOT-runner"
PID_FILE="/var/run/mycustomquarkus.pid"

case "$1" in
    start)
        echo "Starting Quarkus application..."
        start-stop-daemon --start --background --make-pidfile --pidfile $PID_FILE --user quarkus --exec $APP_PATH
        ;;
    stop)
        echo "Stopping Quarkus application..."
        start-stop-daemon --stop --pidfile $PID_FILE --retry 10
        rm -f $PID_FILE
        ;;
    restart)
        $0 stop
        $0 start
        ;;
    status)
        if [ -f $PID_FILE ]; then
            echo "Quarkus application running with PID $(cat $PID_FILE)"
        else
            echo "Quarkus application not running"
        fi
        ;;
    *)
        echo "Usage: $0 {start|stop|restart|status}"
        exit 1
        ;;
esac

exit 0

配套修改systemd服务文件

[Unit]
Description=自定义Quarkus应用服务
After=network.target

[Service]
ExecStart=/usr/local/bin/quarkus-app.sh start
ExecStop=/usr/local/bin/quarkus-app.sh stop
PIDFile=/var/run/mycustomquarkus.pid
User=quarkus
Group=quarkus
Restart=always
RestartSec=5s

[Install]
WantedBy=multi-user.target

脚本权限配置

sudo chmod +x /usr/local/bin/quarkus-app.sh
sudo chown quarkus:quarkus /usr/local/bin/quarkus-app.sh
sudo mkdir -p /var/run/
sudo chown quarkus:quarkus /var/run/

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 19:45:48