我正在运行mongodb作为从node.js的子进程,并要求关闭并按需重启。使用Child_Process.kill(“SIGINT”)似乎是正确的方式,但它会让mongo处于混乱状态,直到修复(或锁定文件被删除)才会重新启动。是否有更好的方法来执行此操作?如何从node.js干净地关闭mongodb?
感谢, 安迪
我正在运行mongodb作为从node.js的子进程,并要求关闭并按需重启。使用Child_Process.kill(“SIGINT”)似乎是正确的方式,但它会让mongo处于混乱状态,直到修复(或锁定文件被删除)才会重新启动。是否有更好的方法来执行此操作?如何从node.js干净地关闭mongodb?
感谢, 安迪
做kill("SIGINT")
导致数据库关闭,没有经过必要的步骤去,并可能导致腐败的数据文件。所以我不会推荐这样做。
停止数据库的正常方法是从mongodb shell发送命令{ "shutdown" : 1 }
或db.shutdownServer()
,但我不知道如何从node.js驱动程序执行此操作。
你可以尝试这样的事:
var MongoClient = require('mongodb').MongoClient;
MongoClient.connect("mongodb://localhost:27017/admin", function(err, db) {
\t if (err) {
\t \t console.log('mongodb is not running');
\t \t process.exit(0);
\t }
\t else {
\t \t db.command({
\t \t \t shutdown : 1
\t \t }, function(err, result) {
\t \t \t console.log('shutting down mongodb - ', err.message);
\t \t \t process.exit(0);
\t \t });
\t }
});
从MongoDB的文档: 发送一个Unix INT或TERM信号 可以使用UNIX上的SIGINT或SIGTERM信号干净停止的mongod类系统。无论是^ C,“杀死-2 PID”,还是杀死-15 PID都可以工作。 \t发送KILL信号kill -9可能会导致损坏,如果mongod没有运行--journal选项。 (在这种情况下,运行repairDatabase命令。) 是否有对Windows的等效操作? – 2012-02-29 11:15:34