我无法将 mongod 的 PID 文件存储在目录中/var/run/mongodb
,并使 mongod 进程以root
.
我已经在 Ubuntu v14.04 上安装了 MongoDB v2.6.3;创建了一个名为的 linux 用户mongodb
;并授予该用户以下配置中目录的所有权,使用chown -R mongodb:mongodb {path}
:
systemLog:
path: /var/log/mongodb/mongod.log
logAppend: true
destination: file
processManagement:
pidFilePath: /var/run/mongodb/mongod.pid
fork: true
security:
keyFile: /srv/mongodb/keyfile
clusterAuthMode: keyFile
storage:
dbPath: /data
replication:
replSetName: myReplicaSet
我知道只有root
用户可以写入/var/run
目录,所以我添加了以下代码/etc/rc.local
以创建我的mongodb
用户拥有的子目录:
PID_FILE_DIRECTORY=/var/run/mongodb
CONFIG_FILE=/etc/mongod.conf
do_start () {
if [ ! -d $PID_FILE_DIRECTORY ]; then
mkdir $PID_FILE_DIRECTORY
chown -R mongodb:mongodb $PID_FILE_DIRECTORY
fi
setuid mongodb
mongod -f $CONFIG_FILE
}
exit 0
当我重新启动服务器时,我希望 mongod 像用户mongodb
运行 mongod 命令一样启动。但是,当我检查日志时,我看到了错误:
ERROR: Cannot write pid file to /var/run/mongodb/mongod.pid: No such file or directory
我注意到/etc/init.d
有一个名为的文件mongod
似乎覆盖了我的命令rc.local
(MongoDB 的默认启动脚本,我似乎找不到任何文档)。感觉很勇敢,我删除了该文件,重新启动服务器,并得到与上述相同的错误。
沮丧,我关闭了服务器并上床睡觉。第二天早上,我醒来,启动服务器,一切都按预期工作。mongod 进程正在运行;目录/var/run/mongodb
存在;一切都很好。
但是,当我重新启动服务器时,我再次收到错误消息。
这里发生了什么?是rc.local
不是在重新启动时运行?如果是这样,我怎样才能让它这样做?有没有更好的方法来实现我的目标?