mongodb在运行吗?

Posted

技术标签:

【中文标题】mongodb在运行吗?【英文标题】:Is mongodb running? 【发布时间】:2011-07-02 18:34:50 【问题描述】:

我已经在我的 unix 服务器上安装了 mongodb 和 php 驱动程序。

我的问题是如何判断 mongodb 是否正在运行?是否有一个简单的命令行查询来检查状态?如果我从 shell 启动它一次,如果我退出 shell,它会继续运行(这似乎不是这种情况)。如何使 mongodb 连接持久并在服务器重新启动时自动启动?

我可以跑:

-bash-3.2$ 苏 密码: [root@xxx]# cd /var/lib [root@xxx]# ./mongodb-linux-i686-1.6.5/bin/mongod ./mongodb-linux-i686-1.6.5/bin/mongod --help 获取帮助和启动选项 2 月 23 日星期三 08:06:54 MongoDB 开始:pid=7271 port=27017 dbpath=/data/db/ 32-bit

** 注意:使用 32 位 MongoDB 时,您的数据限制为大约 2 GB ** 见http://blog.mongodb.org/post/137788967/32-bit-limitations

** 警告:您正在 OpenVZ 中运行。这是已知的坏了!!!

2 月 23 日星期三 08:06:54 db 版本 v1.6.5,pdfile 版本 4.5 2 月 23 日星期三 08:06:54 git 版本:0eb017e9b2828155a67c5612183337b89e12e291 2 月 23 日星期三 08:06:54 系统信息:Linux domU-12-31-39-01-70-B4 2.6.21.7-2.fc8xen #1 SMP Fri 2 月 15 日 12:39:36 EST 2008 i686 BOOST_LIB_VERSION=1_37 2 月 23 日星期三 08:06:54 [initandlisten] 等待端口 27017 上的连接 2 月 23 日星期三 08:06:54 [websvr] 监听端口 28017 的 Web 管理界面

如果我打开一个单独的 shell,我就可以连接到 mongodb:

-bash-3.2$ cd /var/lib -bash-3.2$ ./mongodb-linux-i686-1.6.5/bin/mongo MongoDB shell 版本:1.6.5 连接到:测试 db.foo.find() "_id" : ObjectId("4d63d7d3eb95985ab19c8feb"), "a" : 1

但是,如果我关闭初始 shell,我将无法连接:

-bash-3.2$ cd /var/lib -bash-3.2$ ./mongodb-linux-i686-1.6.5/bin/mongo MongoDB shell 版本:1.6.5 连接到:测试 2 月 23 日星期三 08:25:10 错误:无法连接到服务器 127.0.0.1 (anon):1154 异常:连接失败

【问题讨论】:

【参考方案1】:

检查任一:

ps -edaf | grep mongo | grep -v grep  # "ps" flags may differ on your OS

/etc/init.d/mongodb status     # for MongoDB version < 2.6

/etc/init.d/mongod status      # for MongoDB version >= 2.6

service mongodb status         # for MongoDB version < 2.6

service mongod status          # for MongoDB version >= 2.6

查看 mongod 是否正在运行(您需要是 root 才能执行此操作,或者在所有内容前加上 sudo)。请注意,“grep”命令也将始终显示为单独的进程。

查看日志文件/var/log/mongo/mongo.log,看看是否有问题报告。

【讨论】:

你也可以pgrep mongo 我得到了这个:501 5365 418 0 4:10pm ttys000 0:00.00 grep mongo,这是否意味着它正在运行? service mongod status 对我不起作用,但 service mongodb status 有效。 从 mongo 2.6 开始,该服务是 mongod 之前的 mongodb,令人困惑的是【参考方案2】:

我发现:

ps -ax | grep mongo

要更加一致。返回的值可以用来检测有多少个mongod实例正在运行

【讨论】:

另外,您可能需要考虑添加一个过滤器以不返回您正在运行的 grep 进程。所以:ps -ax | grep -v grep | grep mongo【参考方案3】:

为了快速检查 mongodb 是否正在运行,这个快速 nc 技巧会让你知道。

nc -zvv localhost 27017

以上命令假定您在 localhost 的默认端口上运行它。

要自动启动它,您可能需要查看this thread。

【讨论】:

是的,如果只是检查是否有东西在监听端口,这将有效。如果是这种情况,输出将包含27017 open,否则将包含Connection refused【参考方案4】:

这应该可以正常工作...

pgrep mongod

【讨论】:

【参考方案5】:

查看mongodb当前运行状态:sudo service mongodb status

【讨论】:

我认为sudo 不需要status【参考方案6】:

正确,关闭 shell 将停止 MongoDB。尝试对 mongod 进程使用 --fork 命令行参数,这使它作为守护进程运行。我不是 Unix 专家,但我确信一定有办法让它在机器启动时自动启动。

例如

mongod --fork --logpath /var/log/mongodb.log --logappend

查看Starting and Stopping Mongo 上的完整文档。

【讨论】:

谢谢。我得到了这个:[root@xxx lib]# ./mongodb-linux-i686-1.6.5/bin/mongod --fork --logpath /var/log/m ongodb.log --logappend all output going to: /var/log/mongodb.log forked process: 7518,但是当我关闭 shell 并打开一个新的 shell 时,我得到了Connect failed 嗯,对我有用(Ubuntu 64 位 VM,Mongo v1.7.6),所以我不确定为什么它不适合你。如果你不能让它工作,最好的办法是在 mongodb 论坛上发布它:groups.google.com/group/mongodb-user 但是我用&amp;开始的,现在找不到processid了。 @bobobobo - 你是如何查找进程 ID 的? ps -e | grep mongod【参考方案7】:

在 Ubuntu 上 (doc)

sudo systemctl status mongod

如果运行

● mongod.service - MongoDB Database Server
     Loaded: loaded (/lib/systemd/system/mongod.service; disabled; vendor preset: enabled)
     Active: active (running) since Wed 2020-10-14 14:13:40 UTC; 3s ago
       Docs: https://docs.mongodb.org/manual
   Main PID: 1604 (mongod)
     Memory: 210.8M
     CGroup: /system.slice/mongod.service
             └─1604 /usr/bin/mongod --config /etc/mongod.conf

如果没有运行

● mongod.service - MongoDB Database Server
     Loaded: loaded (/lib/systemd/system/mongod.service; disabled; vendor preset: enabled)
     Active: inactive (dead)
       Docs: https://docs.mongodb.org/manual

启动 mongodb

sudo systemctl start mongod

【讨论】:

【参考方案8】:

您可以使用以下命令检查 MongoDB 状态,例如:sudo service MongoDB status 显示 MongoDB 服务的状态,如屏幕截图:

【讨论】:

【参考方案9】:

可能是因为我没有正确关闭我的开发服务器或类似的原因。 要修复它,请移除锁并使用以下命令启动服务器: sudo rm /var/lib/mongodb/mongod.lock ; sudo start mongodb

【讨论】:

【参考方案10】:

我知道这是针对 php 的,但我来这里是为了寻找 node.js 的解决方案。使用 mongoskin:

mongodb.admin().ping(function(err) 
    if(err === null)
        // true - you got a conntion, congratulations
    else if(err.message.indexOf('failed to connect') !== -1)
        // false - database isn't around
    else
        // actual error, do something about it
)

使用其他驱动程序,您可以尝试建立连接,如果连接失败,您就知道 mongo 服务器已关闭。 Mongoskin 需要实际进行一些调用(例如 ping),因为它是延迟连接的。对于 php,您可以使用 try-to-connect 方法。编写脚本!

PHP:

$dbIsRunning = true
try 
  $m = new MongoClient('localhost:27017');
 catch($e) 
  $dbIsRunning = false

【讨论】:

【参考方案11】:

要检查服务器是否systemd 操作系统上运行,以更适合在 shell 脚本中使用的方式,使用

systemctl is-active mongod

而不是

systemctl status mongod

【讨论】:

以上是关于mongodb在运行吗?的主要内容,如果未能解决你的问题,请参考以下文章

在 ubuntu 16.04 LTS 上运行 mongodb

mongodb 怎么执行sql

MongoDB运行错误[重复]

mongodb有关系数据库中的trigger和procedure等属性吗?

MongoDB 有本地 REST 接口吗?

MongoDB:运行更快的查询,这更好 Pymongo 或 MongoEngine