Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 检测数据库何时启动_Node.js_Mongodb - Fatal编程技术网

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.');

我有一个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.');
            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,并在连接被接受(或超过超时)之前休眠。