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