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

如何实现WSO2AM进程自动重启?排查Ubuntu下重启失效问题

排查Ubuntu中WSO2AM进程自动重启失效问题

首先得明确你的Ubuntu系统正在使用的初始化系统:Ubuntu 16.04及以后版本默认用systemd,14.10及以前则用Upstart。你同时提供了两种配置文件,得先确认当前生效的是哪一套,再针对性排查。

一、先确认当前初始化系统

执行命令判断:

ps -p 1 -o comm=

输出systemd就是用systemd,输出init则是Upstart。


二、针对Systemd配置的排查(多数现代Ubuntu适用)

你提供的systemd服务文件路径是/usr/lib/systemd/system/wso2am.service(或/lib/systemd/system/wso2am.service),先解决配置里的问题,再验证重启机制:

1. 修正服务文件的明显错误

你的配置里有几个会导致失效的问题:

  • After==network.target wso2am.service:多了一个等号,且不能依赖自身服务(会造成循环),应改为After=network.target
  • RemainAfterExit=true:这个参数适合一次性执行的服务,和你的Type=simple不匹配,会让systemd误判服务状态
  • wso2server.sh --start通常会让进程后台运行,systemd的Type=simple要求主进程前台运行,否则systemd会认为进程已退出

修正后的配置示例:

# /usr/lib/systemd/system/wso2am.service
[Unit]
Description=wso2am server daemon
Documentation=https://docs.wso2.com/
After=network.target

[Service]
User=tel
Group=tel
TimeoutStartSec=0
Type=simple
KillMode=process
ExecStart=/bin/bash -lc '/home/tel/Documents/vz/wso2am-2.1.0/wso2am-2.1.0/bin/wso2server.sh'
ExecStop=/bin/bash -lc '/home/tel/Documents/vz/wso2am-2.1.0/wso2am-2.1.0/bin/wso2server.sh --stop'
StandardOutput=journal
Restart=always
RestartSec=2

[Install]
WantedBy=default.target

2. 验证systemd重启机制

  • 重新加载systemd配置:
    sudo systemctl daemon-reload
    
  • 启用并启动服务:
    sudo systemctl enable --now wso2am.service
    
  • 查看服务状态,确认重启策略生效:
    sudo systemctl status wso2am.service
    
    输出里能看到Restart=always的配置,以及服务当前状态。
  • 实时监控日志,手动杀进程后观察是否重启:
    sudo journalctl -u wso2am.service -f
    
    执行kill -9 <pid>杀死进程后,看日志里是否有重启相关的记录。

3. 核心问题说明

用kill -9强制杀进程后,systemd是否重启取决于:

  • 它能监控到主进程的退出:如果脚本后台启动WSO2AM,systemd监控的是bash脚本进程,而非WSO2AM实际进程——脚本退出后,systemd会误判服务状态,不会重启真实的业务进程。
  • 解决办法:要么修改wso2server.sh让它前台运行(多数Java服务可加-Dfork=false类参数),要么把服务Type改成forking,让systemd追踪fork出的子进程。

三、针对Upstart配置的排查(旧版Ubuntu)

你的Upstart脚本路径是/etc/init/wso2am.conf,先修正配置问题:

1. 修正Upstart脚本

你的脚本里没有实际启动WSO2AM的有效命令,且注释了exec行,这肯定无法启动进程,更别说重启了。修正后的示例:

# Ubuntu upstart file at /etc/init/wso2am.conf
#!upstart
description "wso2am"

pre-start script
    mkdir -p /var/log/wso2am/
end script

respawn
respawn limit 15 5
start on runlevel [2345]
stop on runlevel [06]

script
    export JAVA_HOME="/usr/lib/jvm/jdk1.8.0_111"
    # 必须用前台启动命令,不能后台运行
    exec /home/tel/Documents/vz/wso2am-2.1.0/wso2am-2.1.0/bin/wso2server.sh
end script

2. 验证Upstart重启机制

  • 启动服务:
    sudo start wso2am
    
  • 查看服务状态:
    sudo status wso2am
    
  • 查看Upstart日志:
    cat /var/log/upstart/wso2am.log
    
  • 手动杀进程后,用status wso2am确认是否自动重启,或查看日志里的重启记录。

3. 核心问题说明

Upstart的respawn只监控script块里exec启动的主进程,如果脚本后台启动WSO2AM,Upstart会认为主进程已退出,不会触发重启。必须让exec启动的进程前台运行,Upstart才能监控并重启。


四、通用排查要点

  1. 确认进程归属:用ps -ef | grep wso2am找到的进程,必须是初始化系统(systemd/Upstart)启动的子进程,手动启动的进程不会被监控。
  2. 日志优先排查:不管是systemd的journal还是Upstart的日志,都会记录重启失败的原因(比如配置错误、权限不足、进程退出原因等)。
  3. 权限检查:确保tel用户有足够权限启动WSO2AM,以及读写日志目录、安装目录的权限。

内容的提问来源于stack exchange,提问作者VIVEK-MDU

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:00:13