本文主要是介绍【Linux】Centos9设置ActiveMq开机自启功能,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
配置流程:
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 无法启动的原因之一。
- 修改 SELinux 策略:针对 ActiveMQ 执行以下命令,允许它执行所需的 ioctl 操作:
sudo semanage fcontext -a -t bin_t "/path/to/activemq/bin/activemq"
sudo restorecon -v "/path/to/activemq/bin/activemq"
- 重新启用 SELinux:完成上述步骤后,建议重新启用 SELinux,而不是将其保持在 permissive 模式下。你可以执行以下命令:
sudo setenforce 1
- 再执行 sudo systemctl start activemq 问题已解决,配置成功。
这篇关于【Linux】Centos9设置ActiveMq开机自启功能的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!