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
相关产品推荐
相关产品推荐

