我已经在我的 Unix 服务器上安装了 Mongodb 和 PHP 驱动程序。
我的问题是如何判断 Mongodb 是否正在运行?是否有一个简单的命令行查询来检查状态?如果我从 shell 启动它一次,如果我退出 shell,它会继续运行(这似乎不是这种情况)。如何使 Mongodb 连接持久并在服务器重新启动时自动启动?
我可以跑:
-bash-3.2$ su
Password:
[root@xxx]# cd /var/lib
[root@xxx]# ./mongodb-linux-i686-1.6.5/bin/mongod
./mongodb-linux-i686-1.6.5/bin/mongod --help for help and startup options
Wed Feb 23 08:06:54 MongoDB starting : pid=7271 port=27017 dbpath=/data/db/ 32-bit
** NOTE: when using MongoDB 32 bit, you are limited to about 2 gigabytes of data
** see http://blog.mongodb.org/post/137788967/32-bit-limitations
** WARNING: You are running in OpenVZ. This is known to be broken!!!
Wed Feb 23 08:06:54 db version v1.6.5, pdfile version 4.5
Wed Feb 23 08:06:54 git version: 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 12:39:36 EST 2008 i686 BOOST_LIB_VERSION=1_37
Wed Feb 23 08:06:54 [initandlisten] waiting for connections on port 27017
Wed Feb 23 08:06:54 [websvr] web admin interface listening on port 28017
如果我打开一个单独的 shell,然后我可以连接到 mongodb:
-bash-3.2$ cd /var/lib
-bash-3.2$ ./mongodb-linux-i686-1.6.5/bin/mongo
MongoDB shell version: 1.6.5
connecting to: test
> 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 version: 1.6.5
connecting to: test
Wed Feb 23 08:25:10 Error: couldn't connect to server 127.0.0.1 (anon):1154
exception: connect failed
检查:
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
以查看是否报告了任何问题。
我发现:
ps -ax | grep mongo
要更加一致。返回的值可用于检测有多少个 mongod 实例正在运行
为了快速检查 mongodb 是否正在运行,这个快速 nc 技巧会让你知道。
nc -zvv localhost 27017
上面的命令假定您在 localhost 的默认端口上运行它。
对于自动启动它,您可能需要查看 this thread。
27017 open
,否则为 Connection refused
。
这应该可以正常工作...
pgrep mongod
要检查 mongodb 的当前运行状态,请使用:sudo service mongodb status
status
不需要 sudo
在 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
正确,关闭 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
但是当我关闭外壳并打开一个新的外壳时,我得到 Connect failed
&
启动它,现在我找不到 processid。
ps -e | grep mongod
您可以使用以下命令检查 MongoDB 状态,例如:sudo service MongoDB status
显示 MongoDB 服务的状态,如屏幕截图所示:
https://i.stack.imgur.com/6gGdn.png
可能是因为我没有正确关闭我的开发服务器或类似的原因。要修复它,请移除锁定并使用以下命令启动服务器:sudo rm /var/lib/mongodb/mongod.lock ; sudo start mongodb
要检查服务器是否以更适合在 shell 脚本中使用的方式在 systemd
操作系统上运行,请使用
systemctl is-active mongod
而不是
systemctl status mongod
我知道这是针对 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
}
尝试这个:
sudo systemctl status mongod
不定期副业成功案例分享
pgrep mongo
。