mongodb正在运行吗?


117

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

我的问题是如何判断mongodb是否正在运行?是否有一个简单的命令行查询来检查状态?如果我从外壳启动一次,则退出外壳后它将继续运行(事实并非如此)。如何使mongodb连接持久化并在服务器重新启动时自动启动?

我可以跑:

-bash-3.2 $ su
密码:
[root @ xxx]#cd / var / lib
[root @ xxx]#
. / mongodb- linux- i686-1.6.5/ bin / mongod ./mongodb-linux-i686-1.6。 5 / bin /
mongod- 帮助和启动选项的帮助2月23日星期三08:06:54 MongoDB开始:pid = 7271端口= 27017 dbpath = / data / db / 32位

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

**警告:您正在OpenVZ中运行。众所周知这被打破了!!!

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

如果打开单独的外壳,则可以连接到mongodb:

-bash-3.2 $ cd / var / lib
-bash-3.2 $ ./mongodb-linux-i686-1.6.5/bin/mongo
MongoDB Shell版本:1.6.5
连接到:test
db.foo.find()
{“ _id“:ObjectId(” 4d63d7d3eb95985ab19c8feb“),” a“:1}

但是,如果我关闭初始外壳,则无法连接:

-bash-3.2 $ cd / var / lib
-bash-3.2 $ ./mongodb-linux-i686-1.6.5/bin/mongo
MongoDB shell版本:1.6.5
连接到:test
Wed Feb 23 08:25:10 Error :无法连接到服务器127.0.0.1(匿名):1154
异常:连接失败

Answers:


144

请检查以下任何一项:

   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 mongod status

查看mongod是否正在运行(您必须是root用户才能执行此操作,或使用前缀所有内容sudo)。请注意,“ grep”命令还将始终显示为单独的过程。

检查日志文件/var/log/mongo/mongo.log以查看是否报告了任何问题


20
应该是:service mongodb status
MhdSyrwan 2012年

12
您也可以做一个pgrep mongo
slm 2014年

1
我得到了:501 5365 418 0 4:10 pm ttys000 0:00.00 grep mongo,这是否意味着它正在运行?
L1ghtk3ira

1
服务mongod状态不适用于我,但服务mongodb状态有效。
维克斯

5
从mongo 2.6起,该服务在其mongodb之前是mongod,是令人困惑的
tsukimi

40

我发现:

ps -ax | grep mongo

要更加一致。返回的值可用于检测正在运行的mongod实例的数量


6
另外,您可能要考虑添加过滤器,以不返回您正在运行的grep进程。因此:ps -ax | grep -v grep | grep mongo
DCaugs 2015年

34

为了快速检查mongodb是否正在运行,此快速nc技巧将让您知道。

nc -zvv localhost 27017

上面的命令假定您正在本地主机的默认端口上运行它。

要自动启动它,您可能需要查看此线程


1
是的,如果仅检查是否有人在监听端口,则此方法有效。在这种情况下,输出将包含27017 openConnection refused
亚历山大


9

要检查mongodb的当前运行状态,请使用: sudo service mongodb status


8

正确,关闭外壳将停止MongoDB。尝试--fork对mongod进程使用命令行arg,这会使它作为守护程序运行。我不是Unix专家,但是我确定必须有一种方法可以在计算机启动时自动启动它。

例如

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

查看有关启动和停止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但是仍然当我关闭外壳并打开一个新的外壳时Connect failed

嗯,为我工作(Ubuntu 64位VM,Mongo v1.7.6),所以我不确定为什么它不适合您。如果无法正常使用,最好的选择是将其发布在mongodb论坛上:groups.google.com/group/mongodb-user
AdaTheDev 2011年

但是我从开始&,现在找不到进程ID。
bobobobo

@bobobobo-您如何尝试查找进程ID?
塔斯(Tass)2014年

ps -e | grep mongod
bobobobo 2014年

3

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

MongoDB状态



1

我知道这是针对php的,但是我来到这里是为node寻找解决方案。使用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
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.