[求助]ActiveMQ Artemis, shell 中可以正常启动,但使用 systemctl start 无法启动 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
pocketz
V2EX    Linux

[求助]ActiveMQ Artemis, shell 中可以正常启动,但使用 systemctl start 无法启动

  •  
  •   pocketz 2022-04-15 09:11:20 +08:00 2343 次点击
    这是一个创建于 1357 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Artemis 版本:2.19.1
    JDK 1.8.0.271

    尝试过使用不同权限用户,都无法使用 systemctl start 启动

    Shell

    使用 broker 中的 artemis-service start ,能够正常启动

    systemctl

    service 文件如下

    [Unit] Description=Apache ActiveMQ Artemis After=network.target [Service] Type=forking User=activemq Group=activemq ExecStart=/var/lib/jms-broker/bin/artemis-service start ExecStop=/var/lib/jms-broker/bin/artemis-service stop [Install] WantedBy=multi-user.target 

    journalctl -xe中的 artemis-service 返回的信息很有限,除了 starting ,就只有Could not start ${service}

    顺便贴一下 artemis-serive 启动脚本的内容,这个脚本是 artemis 自动生成的

    service=`basename "$0"` # # Discover the ARTEMIS_INSTANCE from the location of this script. # if [ -z "$ARTEMIS_INSTANCE" ] ; then ## resolve links - $0 may be a link to ActiveMQ's home PRG="$0" saveddir=`pwd` # need this for relative symlinks dirname_prg=`dirname "$PRG"` cd "$dirname_prg" while [ -h "$PRG" ] ; do ls=`ls -ld "$PRG"` link=`expr "$ls" : '.*-> \(.*\)$'` if expr "$link" : '.*/.*' > /dev/null; then PRG="$link" else PRG=`dirname "$PRG"`"/$link" fi done ARTEMIS_INSTANCE=`dirname "$PRG"` cd "$saveddir" # make it fully qualified ARTEMIS_INSTANCE=`cd "$ARTEMIS_INSTANCE/.." && pwd` export ARTEMIS_INSTANCE fi PID_FILE="${ARTEMIS_INSTANCE}/data/artemis.pid" if [ ! -d "${ARTEMIS_INSTANCE}/data/" ]; then mkdir "${ARTEMIS_INSTANCE}/data/" fi status() { if [ -f "${PID_FILE}" ] ; then pid=`cat "${PID_FILE}"` # check to see if it's gone... ps -p ${pid} > /dev/null if [ $? -eq 0 ] ; then return 0 else rm "${PID_FILE}" return 3 fi fi return 3 } stop() { if [ -f "${PID_FILE}" ] ; then pid=`cat "${PID_FILE}"` kill $@ ${pid} > /dev/null fi for i in 1 2 3 4 5 ; do status if [ $? -ne 0 ] ; then return 0 fi sleep 1 done echo "Could not stop process ${pid}" return 1 } start() { status if [ $? -eq 0 ] ; then echo "Already running." return 1 fi if [ -z "$ARTEMIS_USER" -o `id -un` = "$ARTEMIS_USER" ] ; then nohup "${ARTEMIS_INSTANCE}/bin/artemis" run > /dev/null 2> /dev/null & else sudo -n -u ${ARTEMIS_USER} nohup "${ARTEMIS_INSTANCE}/bin/artemis" run > /dev/null 2> /dev/null & fi echo $! > "${PID_FILE}" # check to see if stays up... sleep 1 status if [ $? -ne 0 ] ; then echo "Could not start ${service}" return 1 fi echo "${service} is now running (${pid})" return 0 } case $1 in start) echo "Starting ${service}" start exit $? ;; force-stop) echo "Forcibly Stopping ${service}" stop -9 exit $? ;; stop) echo "Gracefully Stopping ${service}" stop exit $? ;; restart) echo "Restarting ${service}" stop start exit $? ;; status) status rc=$? if [ $rc -eq 0 ] ; then echo "${service} is running (${pid})" else echo "${service} is stopped" fi exit $rc ;; *) echo "Usage: $0 {start|stop|restart|force-stop|status}" >&2 exit 2 ;; esac 
    20 条回复    2022-04-15 21:08:32 +08:00
    Kobayashi
        1
    Kobayashi  
       2022-04-15 09:31:29 +08:00 via Android
    不要使用启动脚本,systemd 直接管理 daemon. 把 start 脚本里除去 nohup 的部分提取出来。
    itechify
        2
    itechify  
    PRO
       2022-04-15 09:57:22 +08:00 via Android
    核心代码:
    把 systemd 的 User 修改成和脚本的${ARTEMIS_USER}一致,然后 systemd 的 ExecStart 启动命令修改为
    ${ARTEMIS_INSTANCE}/bin/artemis" run > /dev/null 2> /dev/null
    一致
    julyclyde
        3
    julyclyde  
       2022-04-15 10:52:35 +08:00
    @oneisall8955 不要重定向 stdout 和 stderr 。systemd 会收集的
    julyclyde
        4
    julyclyde  
       2022-04-15 10:53:30 +08:00
    一般使用 init 脚本的服务,启动后进程都会转后台,所以这时候不应该用 forking 类型
    建议 simple 类型+PIDFile

    或者进行彻底的 systemd 化改造
    itechify
        5
    itechify  
    PRO
       2022-04-15 11:14:16 +08:00
    @julyclyde #3 谢谢大佬指教~
    itechify
        6
    itechify  
    PRO
       2022-04-15 11:14:31 +08:00
    pocketz
        7
    pocketz  
    OP
       2022-04-15 11:18:29 +08:00
    @Kobayashi
    @oneisall8955
    @julyclyde
    现在去掉了 forking ,加了
    PIDFile=/var/lib/jms-broker/data/artemis.pid
    改成
    ExecStart=/var/lib/jms-broker/bin/artemis-service start

    结果是返回了正常启动的信息,又马上自动关闭了

    放弃了,直接 /var/lib/jms-broker/bin/artemis-service start 启动了。只是没实现开机启动,倒不影响使用
    pocketz
        8
    pocketz  
    OP
       2022-04-15 11:22:18 +08:00
    @oneisall8955

    我靠,这个文件我昨晚上试过的,也是 Could not start ${service}

    但刚才我又试了一下,竟然绿了!可以启动了

    太奇怪了,可能是我昨晚输错了?
    itechify
        9
    itechify  
    PRO
       2022-04-15 11:30:42 +08:00
    @pocketz #8 撒花~
    pocketz
        10
    pocketz  
    OP
       2022-04-15 11:34:43 +08:00
    @oneisall8955
    @julyclyde

    看来我的记忆没出错,只绿了一小段时间,还是红了

    提示
    ```
    artemis.service holdoff time over, scheduling restarting.
    start request repeated too quickly for artemis.service
    failed to start
    ```
    pocketz
        11
    pocketz  
    OP
       2022-04-15 11:36:25 +08:00
    脚本本身的提示是,启动之后又调用了 stop 命令
    pocketz
        12
    pocketz  
    OP
       2022-04-15 11:50:36 +08:00
    @julyclyde

    对了,请问 journalctl -xe 中提示的 Unregisted Authentication Agent for unix-process:5032:5410854 和启动失败有关系吗
    julyclyde
        13
    julyclyde  
       2022-04-15 14:07:29 +08:00
    @pocketz 修改过 service 之后需要 systemctl daemon-reload 才能生效的
    julyclyde
        14
    julyclyde  
       2022-04-15 14:09:01 +08:00
    @pocketz Unregisted Authentication Agent for unix-process 是 polkit 的日志。具体情况不了解
    julyclyde
        15
    julyclyde  
       2022-04-15 14:14:03 +08:00   1
    @oneisall8955
    把 systemd 的 User 修改成和脚本的${ARTEMIS_USER}一致,在一些情况下会失败(不过你这个案例大概不会失败)

    systemd 的 User 是先降级用户权限,后执行 ExecStart
    init 脚本是刚开始 root 权限,由服务进程初始化之后自己去降级(脚本里 sudo 命令)


    我建议你把脚本里面重定向去掉,用 systemd 运行看看日志
    itechify
        16
    itechify  
    PRO
       2022-04-15 15:11:56 +08:00   1
    服务器下了个 ActiveMQ Artemis ,运行起来了。没问题呀
    服务器 debian9 ,java8 ,artemis 2.19.1

    1 创建了 broker
    /opt/softwae/apache-artemis/bin/artemis create /opt/artemis_brokers/foo

    2 测试直接运行能否正常启动

    /opt/artemis_brokers/foo/bin/artemis run

    3 编写 artemis.service

    ```
    [Unit]
    Description=Artemis Server Service
    After=network.target

    [Service]
    Type=simple
    Restart=on-failure
    RestartSec=5s
    ExecStart=/opt/artemis_brokers/foo/bin/artemis run

    [Install]
    WantedBy=multi-user.target
    ```

    4 复制到 systemd 文件夹及更新

    cp artemis.service /etc/systemd/system
    systemctl daemon-reload

    5 启动及自启等

    systemctl enable artemis.service
    systemctl start artemis.service
    pocketz
        17
    pocketz  
    OP
       2022-04-15 15:45:08 +08:00
    @julyclyde
    谢谢,我去试下

    @oneisall8955
    感谢提供案例!我找找我机器的问题
    itechify
        18
    itechify  
    PRO
       2022-04-15 15:56:57 +08:00
    @pocketz #17 还需要环境变量,不然找不到 java 命令

    - 创建 systemd service 配置文件夹
    mkdir /etc/systemd/system/artemis.service.d

    - 创建环境变量文件
    vim environment.conf

    ```
    [Service]
    EnvirOnment=JAVA_HOME=/opt/software/jdk1.8.0_181
    ```
    - reload 配置
    systemctl daemon-reload
    pocketz
        19
    pocketz  
    OP
       2022-04-15 16:10:17 +08:00
    @oneisall8955

    遇到过找不到 java 的这种情况,我是把 JAVA_HOME 放在了 artemis.profile ,然后在 EnvironmentFile 指定了这个文件
    tramm
        20
    tramm  
       2022-04-15 21:08:32 +08:00
    我记得这个都停止维护了吧? 还用这个的嘛
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1059 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 17:43 PVG 01:43 LAX 09:43 JFK 12:43
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86