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

MidPoint systemd服务启动失败(状态1/FAILURE)但start.sh可正常运行求助

MidPoint systemd服务启动失败(状态1/FAILURE)但直接运行start.sh正常

问题现象

按照官方文档创建MidPoint的systemd服务后,服务启动失败。执行systemctl status midpoint.service显示服务已加载但处于失败状态,进程退出码为1;但直接运行/opt/midpoint/bin/start.sh脚本时,应用可正常启动。

systemctl状态输出

● midpoint.service - MidPoint Standalone Service
     Loaded: loaded (/etc/systemd/system/midpoint.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Tue 2024-01-02 07:15:43 UTC; 1h 55min ago
    Process: 2005 ExecStart=/usr/bin/java -Xmx2048m -Dmidpoint.home=/opt/midpoint/var -jar /opt/midpoint/lib/mi>
   Main PID: 2005 (code=exited, status=1/FAILURE)
        CPU: 7.099s

Jan 02 07:15:43 midpoint-java-19 java[2005]:                 at org.springframework.boot.logging.logback.Spring>
Jan 02 07:15:43 midpoint-java-19 java[2005]:                 at ch.qos.logback.core.joran.GenericXMLConfigurato>
Jan 02 07:15:43 midpoint-java-19 java[2005]:                 at ch.qos.logback.core.joran.GenericXMLConfigurato>
Jan 02 07:15:43 midpoint-java-19 java[2005]:                 at ch.qos.logback.core.joran.GenericXMLConfigurato>
Jan 02 07:15:43 midpoint-java-19 java[2005]:                 at org.springframework.boot.logging.logback.Logbac>
Jan 02 07:15:43 midpoint-java-19 java[2005]:                 at org.springframework.boot.logging.logback.Logbac>
Jan 02 07:15:43 midpoint-java-19 java[2005]:                 ... 30 more
Jan 02 07:15:43 midpoint-java-19 systemd[1]: midpoint.service: Main process exited, code=exited, status=1/FAILU>
Jan 02 07:15:43 midpoint-java-19 systemd[1]: midpoint.service: Failed with result 'exit-code'.
Jan 02 07:15:43 midpoint-java-19 systemd[1]: midpoint.service: Consumed 7.099s CPU time.

start.sh脚本内容

root@midpoint-java-19:/usr/bin# cat /opt/midpoint/bin/start.sh
#!/usr/bin/env bash
# Copyright (C) 2017-2020 Evolveum and contributors
#
# This work is dual-licensed under the Apache License 2.0
# and European Union Public License. See LICENSE file for details.

set -eu

SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd -P)
EXECUTABLE=midpoint.sh

if [[ ! -x "${SCRIPT_DIR}/${EXECUTABLE}" ]]; then
  echo "Cannot find ${SCRIPT_DIR}/${EXECUTABLE}"
  echo "The file is absent or does not have execute permission"
  echo "This file is needed to run this program"
  exit 1
fi
exec "${SCRIPT_DIR}/${EXECUTABLE}" start "$@"

journalctl日志输出(最后20条)

Jan 01 12:38:54 midpoint java[51303]:                 at ch.qos.logback.core.recovery.ResilientFileOutputStream.<init>(ResilientFileOutputStream.java:26)
Jan 01 12:38:54 midpoint java[51303]:                 at ch.qos.logback.core.FileAppender.openFile(FileAppender.java:206)
Jan 01 12:38:54 midpoint java[51303]:                 at ch.qos.logback.core.FileAppender.start(FileAppender.java:126)
Jan 01 12:38:54 midpoint java[51303]:                 at ch.qos.logback.core.rolling.RollingFileAppender.start(RollingFileAppender.java:104)
Jan 01 12:38:54 midpoint java[51303]:                 at ch.qos.logback.core.model.processor.AppenderModelHandler.postHandle(AppenderModelHandler.java:84)
Jan 01 12:38:54 midpoint java[51303]:                 at ch.qos.logback.core.model.processor.DefaultProcessor.secondPhaseTraverse(DefaultProcessor.java:257)
Jan 01 12:38:54 midpoint java[51303]:                 at ch.qos.logback.core.model.processor.DefaultProcessor.secondPhaseTraverse(DefaultProcessor.java:253)
Jan 01 12:38:54 midpoint java[51303]:                 at ch.qos.logback.core.model.processor.DefaultProcessor.traversalLoop(DefaultProcessor.java:90)
Jan 01 12:38:54 midpoint java[51303]:                 at ch.qos.logback.core.model.processor.DefaultProcessor.process(DefaultProcessor.java:106)
Jan 01 12:38:54 midpoint java[51303]:                 at ch.qos.logback.core.joran.GenericXMLConfigurator.processModel(GenericXMLConfigurator.java:208)
Jan 01 12:38:54 midpoint java[51303]:                 at org.springframework.boot.logging.logback.SpringBootJoranConfigurator.processModel(SpringBootJoranCo>
Jan 01 12:38:54 midpoint java[51303]:                 at ch.qos.logback.core.joran.GenericXMLConfigurator.doConfigure(GenericXMLConfigurator.java:170)
Jan 01 12:38:54 midpoint java[51303]:                 at ch.qos.logback.core.joran.GenericXMLConfigurator.doConfigure(GenericXMLConfigurator.java:122)
Jan 01 12:38:54 midpoint java[51303]:                 at ch.qos.logback.core.joran.GenericXMLConfigurator.doConfigure(GenericXMLConfigurator.java:65)
Jan 01 12:38:54 midpoint java[51303]:                 at org.springframework.boot.logging.logback.LogbackLoggingSystem.configureByResourceUrl(LogbackLogging>
Jan 01 12:38:54 midpoint java[51303]:                 at org.springframework.boot.logging.logback.LogbackLoggingSystem.loadConfiguration(LogbackLoggingSyste>
Jan 01 12:38:54 midpoint java[51303]:                 ... 32 more
Jan 01 12:38:54 midpoint systemd[1]: midpoint.service: Main process exited, code=exited, status=1/FAILURE
Jan 01 12:38:54 midpoint systemd[1]: midpoint.service: Failed with result 'exit-code'.
Jan 01 12:38:54 midpoint systemd[1]: midpoint.service: Consumed 7.904s CPU time.

额外进程信息

Process: 50680 ExecStart=/usr/bin/java -Xmx2048m -Dmidpoint.home=/opt/midpoint/var -jar /opt/midpoint/lib/midpoint.jar (code=exited, status=1/FAILURE)


问题分析与修复

从日志可以定位到,错误根源是Logback无法初始化日志文件输出流,核心原因是权限不匹配或systemd环境与shell环境差异:

1. 权限问题修复

systemd服务默认可能以非root用户运行,而直接执行start.sh用的是root,导致日志目录无读写权限:

# 创建专用运行用户(如果不存在)
useradd -r midpoint
# 递归设置MidPoint数据目录权限
chown -R midpoint:midpoint /opt/midpoint/var
chmod -R 755 /opt/midpoint/var/log

2. 修改systemd服务配置

打开/etc/systemd/system/midpoint.service,替换为以下配置,直接调用官方脚本以继承所有环境配置:

[Unit]
Description=MidPoint Standalone Service
After=network.target

[Service]
User=midpoint
Group=midpoint
WorkingDirectory=/opt/midpoint
ExecStart=/opt/midpoint/bin/start.sh
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

3. 重新加载配置并启动服务

systemctl daemon-reload
systemctl start midpoint.service
systemctl status midpoint.service

4. 验证Logback配置(可选)

如果问题仍存在,检查/opt/midpoint/var/conf/logback.xml中的日志路径,确保路径存在且midpoint用户有权限读写:

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${midpoint.home}/log/midpoint.log</file>
    <!-- 其他配置项 -->
</appender>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 06:09:53