Node.js 检测数据库何时启动
我有一个Node.JS服务器,带有一个MongoDB数据库。我在Node.JS中启动数据库,如下所示:Node.js 检测数据库何时启动,node.js,mongodb,Node.js,Mongodb,我有一个Node.JS服务器,带有一个MongoDB数据库。我在Node.JS中启动数据库,如下所示: (function startDatabase() { exec('killall -15 mongod; mongod --dbpath ./db', function (err, stdout, stderr) { if(err) { console.error('Database error! Aborting.');
(function startDatabase() {
exec('killall -15 mongod; mongod --dbpath ./db', function (err, stdout, stderr) {
if(err) {
console.error('Database error! Aborting.');
process.exit(1);
}
});
}());
这种方法的问题是,我无法知道数据库是否已成功启动,因为mongod
从未返回(除非有错误),因此我从未看到stdout
如何在Node.JS中启动MongoDB数据库并检测它何时启动?您可以执行以下操作:
service mongod status //check status
service mongod start //start
service mongod stop //stop
service mongod restart //restart
或者代替服务mongod
/etc/init.d/mongod
startDatabase应该使用
服务mongod start
而不是先终止服务然后再启动。它不是优雅的关闭,您可能会丢失数据/损坏的文件。如果要重新启动,请使用service mongod restart
。但检查状态以停止或重新启动。您可以执行exec('ps aux | grep mongod')
并检测其输出,您还可以获取pid并使用ps
查看该进程是否正在运行。奇怪的是,您的系统没有提供管理服务的方法。你的系统是什么?你是说操作系统?这是Red Hat EL 6。killall
是关闭MongoDB的一种蛮力方式,因为您将杀死您有权杀死的盒子上的所有匹配进程(即,一些进程可能不是由Node.js实例启动的)。你最好用a礼貌地开始/停止。如果您想等到数据库启动,您可以添加一个启动循环来尝试连接MongoDB,并在连接被接受(或超过超时)之前休眠。