1.在openEuler系统上部署软件,例如MySQL或者EMQX,启动可能会报错:

Subject: emqx.service 单元已失败
░░ emqx.service 单元已失败。
12月 03 17:13:05 localhost.localdomain setroubleshoot[671987]: SELinux is preventing (emqx) from execute access on the file emqx. For complete SELinux messages run: sealert -l 6f3e44a6-f286-4dd4-92fd-e1f1036b5fc5
12月 03 17:13:05 localhost.localdomain setroubleshoot[671987]: SELinux is preventing (emqx) from execute access on the file emqx.
                                                                If you want to allow (emqx) to have execute access on the emqx file
                                                                Then you need to change the label on emqx
                                                                # semanage fcontext -a -t FILE_TYPE 'emqx'
                                                                restorecon -v 'emqx'
                                                                If you believe that (emqx) should be allowed execute access on the emqx file by default.
                                                                # ausearch -c '(emqx)' --raw | audit2allow -M my-emqx
                                                                # semodule -X 300 -i my-emqx.pp

单元配置:

[Unit]
Description=EMQX - MQTT Broker
After=network.target

[Service]
Type=forking
User=emqx
Group=emqx
WorkingDirectory=/data/middle_soft/emqx/emqx
ExecStart=/data/middle_soft/emqx/emqx/bin/emqx start
ExecStop=/data/middle_soft/emqx/emqx/bin/emqx stop
Restart=on-failure
RestartSec=10
TimeoutStopSec=60
LimitNOFILE=65536
Environment=HOME=/data/middle_soft/emqx/emqx

StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

2.根本原因:SELinux 阻止了 emqx 用户执行

关键日志(这不是普通文件权限问题(chmod/chown 能解决的),而是 SELinux 安全策略限制!):
SELinux is preventing (emqx) from execute access on the file emqx.

3.强烈不建议禁用,这是系统安全策略,若需要临时禁用测试:

# 临时设为 permissive 模式(不阻止,只记录)
sudo setenforce 0

# 启动服务
sudo systemctl start emqx

# 如果成功,说明确实是 SELinux 问题
# ⚠️ 生产环境不要长期关闭 SELinux!

4.【推荐】为 EMQX 文件添加正确的 SELinux 上下文

# 1. 安装 semanage(如果未安装)
sudo yum install -y policycoreutils-python-utils

# 2. 为整个 EMQX 目录设置可执行上下文
sudo semanage fcontext -a -t bin_t "/data/middle_soft/emqx/emqx(/.*)?"

# 3. 应用新上下文
sudo restorecon -Rv /data/middle_soft/emqx/emqx

5.【高级】 生成自定义 SELinux 策略

# 1. 生成策略模块
sudo ausearch -c '(emqx)' --raw | audit2allow -M my-emqx

# 2. 安装模块
sudo semodule -i my-emqx.pp

6.验证是否修复

# 1. 确认上下文已正确设置
ls -Z /data/middle_soft/emqx/emqx/bin/emqx
# 应显示类似:... bin_t ...

# 2. 启动服务
sudo systemctl daemon-reload
sudo systemctl start emqx

# 3. 查看状态
systemctl status emqx

Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐