MongoDB 由于 dbpath/keyfile 路径权限错误导致 systemctl 启动失败

MongoDB systemctl start failure due to dbpath/keyfile path permission error

我有一个可用的 mongodb 实例,可以 运行 使用 mongod -f /etc/mongod.conf 但它显示 systemctl 服务失败。

我尝试使用 sudo service mongod start 启动它,但它失败了 exitcode=1

我通过sudo chown -R mongod:root 找出了权限错误并更改了每个dbpath和keyfile路径的权限,然后它开始在root下工作

我想知道为什么当 dbpath 和 keyfile 路径权限为 mongod:mongod

时,即使在 root 下它也不起作用

如果我想 运行 systemctl mongod 没有 root 访问权限,如何分配目录权限?

OS - RHEL 8,mongod 版本 5.0

mongod.conf 文件

systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log

storage:
  dbPath: /data/mongodb/mongo
  journal:
    enabled: true

processManagement:
  fork: true  
  pidFilePath: /var/run/mongodb/mongod.pid  
  timeZoneInfo: /usr/share/zoneinfo

net:
  port: 27017
  bindIp: mongo3.xxxxxxx.net  

security:
  authorization: enabled
  keyFile: /data/key/keyfile

replication:
  replSetName: xxxxx

在我的系统上,我使用 sudo systemctl start mongod

启动服务

您可以在服务文件中设置所有内容,可以是这样的:

$ systemctl status mongod
● mongod.service - MongoDB Database Server
   Loaded: loaded (/etc/systemd/system/mongod.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2021-09-06 16:41:02 CEST; 1 weeks 1 days ago


$ cat /etc/systemd/system/mongod.service
[Unit]
Description=MongoDB Database Server
Documentation=https://docs.mongodb.org/manual
After=network.target

[Service]
User=mongod
Group=mongod
Environment="OPTIONS=-f /etc/mongod.conf"
EnvironmentFile=-/etc/sysconfig/mongod
ExecStart=/usr/bin/mongod $OPTIONS
ExecStartPre=/usr/bin/mkdir -p /var/run/mongodb
ExecStartPre=/usr/bin/chown mongod:mongod /var/run/mongodb
ExecStartPre=/usr/bin/chmod 0755 /var/run/mongodb
ExecStartPre=/usr/bin/mkdir -p /data/mongodb
ExecStartPre=/usr/bin/chown mongod:mongod /data/mongodb
ExecStartPre=/usr/bin/chmod 0755 /data/mongodb
PermissionsStartOnly=true
PIDFile=/var/run/mongodb/mongod.pid
Type=forking

请注意,当您安装 MongoDB 时,它会在 /usr/lib/systemd/system/mongod.service 处创建一个默认服务文件。你不应该修改这个文件,它可能会在下次更新时被你的包管理器覆盖。而是将您的自定义文件放在 /etc/systemd/system/mongod.service(参见 https://unix.stackexchange.com/questions/224992/where-do-i-put-my-systemd-unit-file)——并且不要忘记 systemctl daemon-reload