2012-02-29 48 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 } 
 
});