2012-02-29 122 views
3

我正在运行mongodb作为从node.js的子进程,并要求关闭并按需重启。使用Child_Process.kill(“SIGINT”)似乎是正确的方式,但它会让mongo处于混乱状态,直到修复(或锁定文件被删除)才会重新启动。是否有更好的方法来执行此操作?如何从node.js干净地关闭mongodb?

感谢, 安迪

回答

1

kill("SIGINT")导致数据库关闭,没有经过必要的步骤去,并可能导致腐败的数据文件。所以我不会推荐这样做。

停止数据库的正常方法是从mongodb shell发送命令{ "shutdown" : 1 }db.shutdownServer(),但我不知道如何从node.js驱动程序执行此操作。

+2

从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

0

你可以尝试这样的事:

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 } 
 
});