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
我有一个可用的 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
和
如果我想 运行 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