[英]MongoDB, an Ubuntu user other than root, and storing the PID file in /var/run/mongodb
我无法将mongod的PID文件存储在目录/var/run/mongodb
并且无法以root
以外的用户身份启动mongod进程。
我已经在Ubuntu v14.04上安装了MongoDB v2.6.3; 创建了一个名为mongodb
的linux用户; 并使用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
不在重新启动时运行吗? 如果是这样,我该怎么做呢? 有没有更好的方法可以实现我的目标?
事实证明,在Ubuntu中处理启动服务的首选方式是使用upstart配置文件 ,该文件位于/etc/init
。
查看/etc/init/mongodb
,我发现一个部分如下所示:
pre-start script
mkdir -p /var/lib/mongodb/
mkdir -p /var/log/mongodb/
end script
我添加到:
mkdir -p /var/run/mongodb
chown -R mongodb:mongodb /var/run/mongodb
这似乎可以解决问题!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.