簡體   English   中英

MongoDB,不是root用戶的Ubuntu用戶,並將PID文件存儲在/ var / run / mongodb中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM