如何在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
配置步骤
- 创建专用运行用户(可选但推荐):
sudo useradd -r -s /sbin/nologin quarkus - 调整可执行文件权限:
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 - 启用并启动服务:
sudo systemctl daemon-reload sudo systemctl enable mycustomquarkus.service sudo systemctl start mycustomquarkus.service - 状态与日志查看:
# 查看服务运行状态 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
相关产品推荐
相关产品推荐

