【Linux】Centos9设置ActiveMq开机自启功能

ops/2024/9/22 22:47:26/

配置流程:

1. 创建 Systemd 服务文件。这个文件通常存放在/usr/lib/systemd/system/目录下,命名为 activemq.service。

#先创建文件,然后编辑:
sudo touch /usr/lib/systemd/system/activemq.service
sudo vim /usr/lib/systemd/system/activemq.service

2. 在文件中添加以下内容:

[Unit]
Description=Apache ActiveMQ
After=network.target[Service]
Type=forking
Environment="JAVA_HOME=/mrefuel/jdk1.8.0_181"
Environment="JAVACMD=$JAVA_HOME/bin/java"
ExecStart=/path/to/activemq/bin/activemq start #ExecStart 和 ExecStop 中的路径需要替换为你的 ActiveMQ 安装路径。
ExecStop=/mrefuel/activemq/bin/activemq stop
Restart=on-failure #指定了在失败时自动重启服务。
RestartSec=10 #设置了重启间隔为 10 秒。
User=root #User 和 Group 应该是运行 ActiveMQ 的用户和组。如果没有特定用户,可以创建一个或使用默认用户。
Group=root[Install]
WantedBy=multi-user.target

3. 重新加载 Systemd 配置

sudo systemctl daemon-reload

4. 启用 ActiveMQ 服务开机自启动

sudo systemctl enable activemq

5. 启动 ActiveMQ 服务

sudo systemctl start activemq

6. 检查服务状态

sudo systemctl status activemq# 手动重启 
# sudo systemctl restart activemq

7.如何停止自启动

sudo systemctl disable activemq
sudo systemctl stop activemq
sudo systemctl daemon-reload

遇到的问题:

  • 此问题在自己搭建的虚拟机中出现,阿里云服务器完成以上步骤即可成功。

1. 执行 sudo systemctl start activemq,出现以下报错。

Job for activemq.service failed because the control process exited with error code.
See "systemctl status activemq.service" and "journalctl -xeu activemq.service" for details.

2. 使用命令排查问题,发现以下报错

  • 执行 systemctl status activemq.service 发现运行失败
  • 再执行 journalctl -xeu activemq.service 查看详细的失败原因
5月 14 09:55:35 localhost.localdomain systemd[191750]: activemq.service: Failed to locate executable /path/to/activemq/bin/activemq: Permission denied
░░ Subject: 进程 /path/to/activemq/bin/activemq 无法执行
░░ Defined-By: systemd
░░ Support: https://access.redhat.com/support
░░ 
░░ 进程 /path/to/activemq/bin/activemq 无法被执行并已失败。
░░ 
░░ 该进程返回的错误代码为 ERRNO。

3. 怀疑是权限问题,进行排查

#根据文件权限显示,activemq 脚本具有执行权限 (rwxr-xr-x),并且所有者是 root 用户和 root 组。
ls -l /path/to/activemq/bin/activemq
-rwxr-xr-x. 1 root root 21452  8月 22  2023 /path/to/activemq/bin/activemq
#sudo chmod +x /path/to/activemq/bin/activemqls -ld /path/to/activemq/bin/
#sudo chmod +x /path/to/activemq/bin/

4. 如果权限已经正确设置,但仍然出现权限被拒绝的错误,那么可能是由于 SELinux 或其他安全性机制导致的。

这里我直接做了 sudo setenforce 0 操作,执行 sudo systemctl start activemq 发现服务成功启动。

  • 检查 SELinux 配置:检查 SELinux 的配置是否会影响到 ActiveMQ 的执行。你可以通过运行 sestatus 命令来查看 SELinux 的状态,以及通过 /etc/selinux/config 文件来查看 SELinux 的配置。

  • 临时禁用 SELinux:尝试临时禁用 SELinux,然后重新启动 ActiveMQ,看看问题是否仍然存在。你可以使用以下命令来临时禁用 SELinux:

    sudo setenforce 0
    
  • 检查其他安全性机制:除了 SELinux 外,还有其他安全性机制可能会导致权限问题。确保你检查了系统中是否还有其他安全性机制,并且了解它们是否会影响到 ActiveMQ 的执行。

5. 检查 SELinux 的日志,查看它为什么阻止了 ActiveMQ 的操作。SELinux 的日志通常位于 /var/log/audit/audit.log 文件中。

type=AVC msg=audit(1715656532.025:18834): avc:  denied  { ioctl } for  pid=204690 comm="activemq" path="/path/to/activemq/bin/activemq" dev="dm-0" ino=35441443 ioctlcmd=0x5401 scontext=system_u:system_r:init_t:s0 tcontext=unconfined_u:object_r:default_t:s0 tclass=file permissive=1
type=SYSCALL msg=audit(1715656532.025:18834): arch=c000003e syscall=16 success=no exit=-25 a0=3 a1=5401 a2=7ffde2f5c190 a3=0 items=0 ppid=1 pid=204690 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="activemq" exe="/usr/bin/bash" subj=system_u:system_r:init_t:s0 key=(null)ARCH=x86_64 SYSCALL=ioctl AUID="unset" UID="root" GID="root" EUID="root" SUID="root" FSUID="root" EGID="root" SGID="root" FSGID="root"
type=PROCTITLE msg=audit(1715656532.025:18834): proctitle="(activemq)"
  • 根据日志,可以看到 SELinux 拒绝了 ActiveMQ 进程对 /path/to/activemq/bin/activemq 文件的 ioctl 操作。这可能是导致 ActiveMQ 无法启动的原因之一。
  1. 修改 SELinux 策略:针对 ActiveMQ 执行以下命令,允许它执行所需的 ioctl 操作:
sudo semanage fcontext -a -t bin_t "/path/to/activemq/bin/activemq"
sudo restorecon -v "/path/to/activemq/bin/activemq"
  1. 重新启用 SELinux:完成上述步骤后,建议重新启用 SELinux,而不是将其保持在 permissive 模式下。你可以执行以下命令:
sudo setenforce 1
  • 再执行 sudo systemctl start activemq 问题已解决,配置成功。

http://www.ppmy.cn/ops/41655.html

相关文章

异步I/O库-libuv介绍

1.简介 libuv是一个跨平台的支持事件驱动的异步I/O的库,使开发者可以以非阻塞的方式执行文件I/O操作、网络通信、子进程管理等。 libuv的主要特点包括: 事件循环:libuv有一个基于事件循环的模型,它不断地轮询事件,并…

【实战selenium框架下在爱企查爬取企业的历史变更信息】文末附Google浏览器和驱动的下载

代码如下 # 导入包 import random import time from tkinter import filedialog import tkinter as tk import xlrd import os import datetime import csv from selenium import webdriver from selenium.webdriver import Keys from selenium.webdriver.common.by import By…

亚马逊自养号测评策略:提升店铺产品权重的秘诀

对于卖家而言,拥有一款爆款产品无疑是获得流量的关键,同时它也能显著提升店铺的销量。因此,大部分卖家都热衷于学习如何打造爆款产品的策略,特别是对于那些致力于经营自己店铺的卖家来说,掌握这一技巧对于店铺的成功运…

2022 年高教社杯全国大学生数学建模竞赛-C 题 古代玻璃制品的成分分析与鉴别详解+聚类模型Python代码源码

前言 简单介绍一下我自己:博主专注建模四年,参与过大大小小数十来次数学建模,理解各类模型原理以及每种模型的建模流程和各类题目分析方法。参与过十余次数学建模大赛,三次美赛获得过二次M奖一次H奖,国赛二等奖。**提…

JAVA实验项目(二): 抽象类、接口的定义与使用

实验项目二 抽象类、接口的定义与使用 Tips:"分享是快乐的源泉💧,在我的博客里,不仅有知识的海洋🌊,还有满满的正能量加持💪,快来和我一起分享这份快乐吧😊&…

python常见数据的存取

python数据的存取 python数据的存取数据的保存3.1.1 保存list3.1.2 保存Dict3.1.3 保存Set3.1.4 保存Dataframe3.1.5 保存Matrix 3.2 数据的读取3.2.1 读取txt文件中的数据3.2.2 读取excel文件中的数据3.2.3 读取csv文件中的数据3.2.4 读取stata文件中的数据3.2.5 读取R文件中的…

银川业务外包选邦芒 助力企业有效控制用工成本

业务外包是企业战略的一部分,旨在通过专业化和灵活性提升企业的核心竞争力。银川邦芒人力通过其专业的人员管理和规范化的操作流程,帮助企业将重复性和非核心的业务流程外包出去,从而简化企业的用工流程,降低人员管理成本&#xf…

Leetcode39.组合总和

文章目录 题目描述解题思路重复子集剪枝 代码 题目 参考题解 题目描述 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返…