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
但是我用&
开始的,现在找不到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