如何从node.js干净地关闭mongodb?

时间:2012-02-29 10:26:02

标签: node.js mongodb

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

谢谢, 安迪

3 个答案:

答案 0 :(得分:0)

执行kill("SIGINT")会导致数据库无法执行所需的步骤而关闭,并可能导致数据文件损坏。所以我不建议这样做。

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

答案 1 :(得分:0)

你可以尝试这样的事情:



var MongoClient = require('mongodb').MongoClient;
MongoClient.connect("mongodb://localhost:27017/admin", function(err, db) {
	if (err) {
		console.log('mongodb is not running');
		process.exit(0);
	}
	else {
		db.command({
			shutdown : 1
		}, function(err, result) {
			console.log('shutting down mongodb - ', err.message);
			process.exit(0);
		});
	}
});




答案 2 :(得分:0)

你可以在mac

上使用nodeJS结束mongodb进程

1)将下面的脚本保存到script.js

'use strict'
const exec = require('child_process').execSync;
function killport(port) {
    var processId = null
    try {
        processId = exec(`lsof -t -i:${port}`);
    } catch (e) {
        console.log("could not catch");
    }
    if (processId !== null) { // if exists kill
       try{
           if(exec(`kill ${processId}`)){
               console.log("closed");
            }
       } catch(e){
            console.log("error executing");
       }
     }
  }
 killport(27017); 

2)运行node script.js