如何使用身份验证在upstart服务中设置mogodb

时间:2016-01-18 18:04:14

标签: mongodb ubuntu startup upstart startupscript

我在mongodb v2.6.11中使用用户名&创建了超级用户 tom 密码,现在我想在 ubuntu启动服务

添加

关于搜索知道我必须编辑下面的文件

  

这就是我的/etc/init/mongod.conf看起来

的方式
pre-start script
    mkdir -p /var/lib/mongodb/
    mkdir -p /var/log/mongodb/
end script

start on runlevel [2345]
stop on runlevel [06]

script
  ENABLE_MONGOD="yes"
  CONF=/etc/mongod.conf
  DAEMON=/usr/bin/mongod
  DAEMONUSER=${DAEMONUSER:-mongodb}

  if [ -f /etc/default/mongod ]; then . /etc/default/mongod; fi

  # Handle NUMA access to CPUs (SERVER-3574)
  # This verifies the existence of numactl as well as testing that the command works
  NUMACTL_ARGS="--interleave=all"
  if which numactl >/dev/null 2>/dev/null && numactl $NUMACTL_ARGS ls / >/dev/null 2>/dev/null
  then/etc/init/mongod.conf
    NUMACTL="$(which numactl) -- $NUMACTL_ARGS"
    DAEMON_OPTS=${DAEMON_OPTS:-"--config $CONF"}
  else
    NUMACTL=""
    DAEMON_OPTS="-- "${DAEMON_OPTS:-"--config $CONF"}
  fi

  if [ "x$ENABLE_MONGOD" = "xyes" ]
  then
    exec start-stop-daemon --start --chuid $DAEMONUSER --exec $NUMACTL $DAEMON $DAEMON_OPTS
  fi
end script
  

ATTEMPT 1:使用mongo命令行

sudo mongod --auth --port 27017 --dbpath /var/lib/mongodb

但不知道在/etc/init/mongod.conf中要改变什么?

  

ATTEMPT 2:使用/etc/mongod.conf

  1. /etc/mongod.conf
  2. 中的更改

    auth = true

    port = 27017

    1. $sudo mongod --config /etc/mongod.conf

    2. 触发命令后
    3. /var/log/mongodb/mongod.log

      2016-01-20T23:58:41.675+0530 ***** SERVER RESTARTED ***** 2016-01-20T23:58:41.677+0530 [initandlisten] MongoDB starting : pid=3168 port=27017 dbpath=/var/lib/mongodb 64-bit host=vijay 2016-01-20T23:58:41.677+0530 [initandlisten] db version v2.6.11 2016-01-20T23:58:41.677+0530 [initandlisten] git version: d00c1735675c457f75a12d530bee85421f0c5548 2016-01-20T23:58:41.677+0530 [initandlisten] build info: Linux build4.ny.cbi.10gen.cc 2.6.32-431.3.1.el6.x86_64 #1 SMP Fri Jan 3 21:39:27 UTC 2014 x86_64 BOOST_LIB_VERSION=1_49 2016-01-20T23:58:41.677+0530 [initandlisten] allocator: tcmalloc 2016-01-20T23:58:41.677+0530 [initandlisten] options: { config: "/etc/mongod.conf", net: { bindIp: "127.0.0.1", port: 27017 }, security: { authorization: "enabled" }, storage: { dbPath: "/var/lib/mongodb" }, systemLog: { destination: "file", logAppend: true, path: "/var/log/mongodb/mongod.log" } } 2016-01-20T23:58:41.812+0530 [initandlisten] journal dir=/var/lib/mongodb/journal 2016-01-20T23:58:41.812+0530 [initandlisten] recover : no journal files present, no recovery needed 2016-01-20T23:58:41.934+0530 [initandlisten] waiting for connections on port 27017 2016-01-20T23:58:47.746+0530 [signalProcessingThread] got signal 2 (Interrupt), will terminate after current cmd ends 2016-01-20T23:58:47.746+0530 [signalProcessingThread] now exiting 2016-01-20T23:58:47.746+0530 [signalProcessingThread] dbexit: 2016-01-20T23:58:47.746+0530 [signalProcessingThread] shutdown: going to close listening sockets... 2016-01-20T23:58:47.746+0530 [signalProcessingThread] closing listening socket: 10 2016-01-20T23:58:47.746+0530 [signalProcessingThread] closing listening socket: 13 2016-01-20T23:58:47.746+0530 [signalProcessingThread] removing socket file: /tmp/mongodb-27017.sock 2016-01-20T23:58:47.746+0530 [signalProcessingThread] shutdown: going to flush diaglog... 2016-01-20T23:58:47.746+0530 [signalProcessingThread] shutdown: going to close sockets... 2016-01-20T23:58:47.746+0530 [signalProcessingThread] shutdown: waiting for fs preallocator... 2016-01-20T23:58:47.746+0530 [signalProcessingThread] shutdown: lock for final commit... 2016-01-20T23:58:47.746+0530 [signalProcessingThread] shutdown: final commit... 2016-01-20T23:58:47.838+0530 [signalProcessingThread] shutdown: closing all files... 2016-01-20T23:58:47.843+0530 [signalProcessingThread] closeAllFiles() finished 2016-01-20T23:58:47.843+0530 [signalProcessingThread] journalCleanup... 2016-01-20T23:58:47.843+0530 [signalProcessingThread] removeJournalFiles 2016-01-20T23:58:47.949+0530 [signalProcessingThread] shutdown: removing fs lock... 2016-01-20T23:58:47.949+0530 [signalProcessingThread] dbexit: really exiting now

    4. 但关闭终端mongodb也关闭

    5.   

      ATTEMPT 3

      1. /etc/mongod.conf
      2. 中的更改

        auth = true

        port = 27017

        1. 重新启动计算机

        2. 重新启动计算机

          之后
        3. /var/log/mongodb/mongod.log

          2016-01-21T00:40:13.011+0530 ***** SERVER RESTARTED ***** 2016-01-21T00:40:13.014+0530 [initandlisten] MongoDB starting : pid=1012 port=27017 dbpath=/var/lib/mongodb 64-bit host=vijay 2016-01-21T00:40:13.014+0530 [initandlisten] db version v2.6.11 2016-01-21T00:40:13.014+0530 [initandlisten] git version: d00c1735675c457f75a12d530bee85421f0c5548 2016-01-21T00:40:13.014+0530 [initandlisten] build info: Linux build4.ny.cbi.10gen.cc 2.6.32-431.3.1.el6.x86_64 #1 SMP Fri Jan 3 21:39:27 UTC 2014 x86_64 BOOST_LIB_VERSION=1_49 2016-01-21T00:40:13.014+0530 [initandlisten] allocator: tcmalloc 2016-01-21T00:40:13.014+0530 [initandlisten] options: { config: "/etc/mongod.conf", net: { bindIp: "127.0.0.1", port: 27017 }, security: { authorization: "enabled" }, storage: { dbPath: "/var/lib/mongodb" }, systemLog: { destination: "file", logAppend: true, path: "/var/log/mongodb/mongod.log" } } 2016-01-21T00:40:13.439+0530 [initandlisten] exception in initAndListen: 10309 Unable to create/open lock file: /var/lib/mongodb/mongod.lock errno:13 Permission denied Is a mongod instance already running?, terminating 2016-01-21T00:40:13.439+0530 [initandlisten] dbexit: 2016-01-21T00:40:13.439+0530 [initandlisten] shutdown: going to close listening sockets... 2016-01-21T00:40:13.439+0530 [initandlisten] shutdown: going to flush diaglog... 2016-01-21T00:40:13.439+0530 [initandlisten] shutdown: going to close sockets... 2016-01-21T00:40:13.439+0530 [initandlisten] shutdown: waiting for fs preallocator... 2016-01-21T00:40:13.439+0530 [initandlisten] shutdown: lock for final commit... 2016-01-21T00:40:13.439+0530 [initandlisten] shutdown: final commit... 2016-01-21T00:40:13.439+0530 [initandlisten] shutdown: closing all files... 2016-01-21T00:40:13.439+0530 [initandlisten] closeAllFiles() finished 2016-01-21T00:40:13.439+0530 [initandlisten] shutdown: removing fs lock... 2016-01-21T00:40:13.439+0530 [initandlisten] couldn't remove fs lock errno:9 Bad file descriptor 2016-01-21T00:40:13.440+0530 [initandlisten] dbexit: really exiting now

        4. 观察Unable to create/open lock file: /var/lib/mongodb/mongod.lock errno:13 Permission denied Is a mongod instance already running?, terminating 我在日志中发现了这个错误。不知道是否导致mongodb终止。如果它导致mongo在计算机启动时停止然后如何设置permisssion?

4 个答案:

答案 0 :(得分:2)

或者可以使用supervisor

apt install supervisor

进程mongodb的设置:

在位置myupstartservice.conf创建文件/etc/supervisor/conf.d并将其放在代码

下面
[program:mongo]
command=/usr/bin/mongod --auth --config /etc/mongod.conf
autostart=true
autorestart=true
user=root
priority=100

然后检查服务

service supervisor restart

some reference

答案 1 :(得分:2)

绝对没有必要摆弄启动文件(除非你完全知道你在做什么,否则你真的不应该这样做)或安装其他软件来管理MongoDB。

我宁愿建议read MongoDB's extensive documentation of the config file options

您唯一需要做的就是设置

auth=true

用于旧配置文件或

security:
  authorization: enabled

,用于/etc/mongod.conf

中的YAML配置文件

答案 2 :(得分:1)

感谢@Markus W mahalberg通过详细步骤扩展您的答案

  

正确的Mongodb方式在启动时使用身份验证设置mongo

步骤

1:sudo apt-get install mongodb-org - in new terminal

2:sudo mongod --port 27017 --dbpath /var/lib/mongodb

3:mongo --port 27017 - 在新终端

4:use admin

5:让我们设置superuser

db.createUser(
{
    user: "tom",
    pwd: "jerry",
    roles: [
              { role: "userAdminAnyDatabase", db: "admin" },
              { role: "readWriteAnyDatabase", db: "admin" },
              { role: "dbAdminAnyDatabase", db: "admin" },
              { role: "clusterAdmin", db: "admin" }
           ]
})

6:允许为 启动服务 配置/etc/mongod.conf中的更改并设置

auth = true

port = 27017

7:sudo /etc/init.d/mongod stopsudo service mongod stop - 在新终端中

8:sudo /etc/init.d/mongod startsudo service mongod start

9:restart your pc,在重新启动电脑之前,请清空此文件/var/log/mongodb/mongod.log并保存

  

现在让我们检查两个的内容身份验证& mongodb在启动时运行

1:检查身份验证设置

mongo --port 27017 -u "tom" -p "jerry" --authenticationDatabase "admin" - 新终端中的

注意此步骤是最重要的一步。

它将在终端上输出

MongoDB shell version: 2.6.11
connecting to: 127.0.0.1:27017/test
>

2:检查mongodb是否在启动时运行

运行以下命令而不运行mongod,因为mongod应该在启动时启动

mongo --port 27017 -u "tom" -p "jerry" --authenticationDatabase "admin" - 新终端中的

如果它剂量开始,则打开此文件'/var/log/mongodb/mongod.log'。

如果它包含错误日志:

Unable to create/open lock file: /var/lib/mongodb/mongod.lock errno:13 Permission denied Is a mongod instance already running?, terminating

然后应用这些权限并重新启动并再次检查

sudo chown -R mongodb:mongodb /var/lib/mongodb/.
sudo chown -R mongodb:mongodb /var/log/mongodb/mongod.log
sudo /etc/init.d/mongod stop` OR `sudo service mongod stop    
sudo /etc/init.d/mongod start` OR `sudo service mongod start 

如果它不包含上述错误日志,那么您应该在启动时成功启动了mongodb

答案 3 :(得分:0)

1:得到 - > $cd /etc/init/

2:通过vi或nano编辑器使用以下代码创建文件myservice.conf

description "service to start mongodb at startup"
author "plutopunch :)"

start on started mountall
stop on shutdown

respawn
respawn limit 99 5

script
     export HOME="/home/admin"

     exec sudo mongod --port 27017 --auth --dbpath /var/lib/mongodb
end script

post-start script
end script

3:重启pc

http://upstart.ubuntu.com/cookbook/