linux - MongoDB,非root的Ubuntu用户,PID文件存放在/var/run/mongodb

标签 linux mongodb ubuntu pid rc

我无法将 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 的默认启动脚本)。感觉很勇敢,我删除了那个文件,重新启动了服务器,并得到了与上面相同的错误。

沮丧的是,我关闭了服务器并上床 sleep 。第二天早上,我醒来,启动服务器,一切都按预期进行。 mongod 进程正在运行;目录 /var/run/mongodb 存在;一切都很好。

但是,当我重新启动服务器时,我再次收到错误消息。

这里发生了什么?? rc.local 不是在重启时运行吗?如果是这样,我怎样才能让它这样做?有没有更好的方法来实现我的目标?

最佳答案

事实证明,在 Ubuntu 中处理启动服务的首选方法是使用 upstart configuration files ,它们位于 /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

这似乎成功了!

关于linux - MongoDB,非root的Ubuntu用户,PID文件存放在/var/run/mongodb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25205319/

相关文章:

python - 将字节串输入到 C 程序用户输入中

c++ - 是否有任何不关注 Java 的优秀并发/并行书籍?

linux - 如何在每个分支指令上在 kvm 中执行 VMEXIT?

linux - 应该为 Docker 中的 TeamCity 代理提供什么服务器 URL?

mongodb - 如何(轻松地)从文档数组中查询字段的一系列值

node.js - 无法将 mongodb atlas 连接到 intellij MongoExplorer

swift - 从 Swift 读取 Unix 时间

mongodb - 如何在 Mongodb 中检查集合是否分片

Java - ArrayList remove() 未删除

apache - 从服务器请求文件多少次?