2011-12-13 44 views
56

Tôi đang chạy mongo 1.8.2 và cố gắng xem cách xóa sạch nó trên máy Mac.Cách dọn dẹp mongod trên Mac OS X là gì?

trên các máy chủ của chúng tôi ubuntu tôi có thể tắt máy Mongo sạch từ vỏ Mongo với:

> use admin 
> db.shutdownServer() 

nhưng trên máy Mac của tôi, nó không giết chết quá trình mongod. đầu ra cho thấy rằng nó 'nên được' tắt máy nhưng khi tôi ps -ef | grep mongo nó cho tôi thấy một quá trình hoạt động. Ngoài ra, tôi vẫn có thể mở một vỏ mongo và truy vấn dbs của tôi như nó đã không bao giờ tắt máy.

đầu ra từ db.shutdownServer của tôi() tại địa phương là:

MongoDB shell version: 1.8.2 
connecting to: test 
> use admin     
switched to db admin 
> db.shutdownServer() 
Tue Dec 13 11:44:21 DBClientCursor::init call() failed 
Tue Dec 13 11:44:21 query failed : admin.$cmd { shutdown: 1.0 } to: 127.0.0.1 
server should be down... 
Tue Dec 13 11:44:21 trying reconnect to 127.0.0.1 
Tue Dec 13 11:44:21 reconnect 127.0.0.1 failed couldn't connect to server 127.0.0.1 
Tue Dec 13 11:44:21 Error: error doing query: unknown shell/collection.js:150 

tôi biết tôi chỉ có thể giết chết quá trình này nhưng tôi muốn làm điều đó sạch sẽ hơn.

+0

Bạn đã bắt đầu 'mongod' như thế nào? Chỉ cần ở vỏ? Sử dụng 'launchctl'? – dcrosta

+0

Bạn có bất kỳ thông tin nào từ nhật ký không? Có thể MongoDB là "tự động khởi động lại". Bạn có thể muốn chạy với '--logappend', mặc dù một tệp nhật ký hoàn toàn mới là một dấu hiệu rõ ràng rằng quá trình được khởi động lại. –

Trả lời

121

Có lẽ vì launchctl đang quản lý dụ mongod của bạn. Nếu bạn muốn bắt đầu và tắt máy mongod dụ, dỡ bỏ rằng đầu tiên:

launchctl unload -w ~/Library/LaunchAgents/org.mongodb.mongod.plist 

Sau đó bắt đầu mongod bằng tay:

mongod -f path/to/mongod.conf --fork 

Bạn có thể tìm thấy vị trí mongod.conf của bạn từ ~/Library/LaunchAgents/org.mongodb.mongod.plist.

Sau đó, db.shutdownServer() sẽ hoạt động tốt.

gia tăng ngày 22 tháng hai năm 2014:

Nếu bạn đã cài đặt MongoDB qua homebrew, homebrew thực sự có một brew services lệnh tiện dụng. Để hiển thị các dịch vụ đang chạy hiện tại:

brew services list

Để bắt đầu MongoDB:

brew services start mongodb

Để dừng MongoDB nếu nó đang chạy:

brew services stop mongodb

Cập nhật

Như edufinn đã chỉ ra trong nhận xét, brew services hiện khả dụng dưới dạng lệnh do người dùng xác định và có thể được cài đặt bằng lệnh sau: brew tap gapple/services.

+0

đó là nó. cảm ơn! – emilebaizel

+21

Trong trường hợp ai đó quan tâm, hiện tại, nếu bạn đã cài đặt mongodb thông qua homebrew, bạn thực sự cần phải thực hiện 'launchctl stop homebrew.mxcl.mongodb' để dừng mongodb. –

+3

Kể từ tháng 9 năm 2014, có thông báo không được chấp nhận trong 'brew' về' brew services': '$ brew services Cảnh báo: dịch vụ bia không được hỗ trợ và sẽ sớm bị xóa.' –

3

Kiểm tra các tài liệu:

http://www.mongodb.org/display/DOCS/Starting+and+Stopping+Mongo#StartingandStoppingMongo-SendingaUnixINTorTERMsignal

Nếu bạn bắt đầu nó trong một thiết bị đầu cuối, bạn sẽ có ok với một ctrl + 'c' - điều này sẽ làm một shutdown sạch.

Tuy nhiên, nếu bạn đang sử dụng launchctl, có hướng dẫn cụ thể cho điều sẽ thay đổi tùy thuộc vào cách cài đặt.

Nếu bạn đang sử dụng Homebrew nó sẽ là launchctl stop homebrew.mxcl.mongodb

4

Tôi muốn dừng máy chủ MongoDB bằng cách sử dụng lệnh port.

sudo port unload mongodb 

Và để bắt đầu lại.

sudo port load mongodb 
+2

Chỉ hoạt động nếu bạn đã cài đặt macports. –

21

Nếu bạn cài đặt MongoDB với homebrew, có một cách dễ dàng hơn:

Danh sách Mongo việc với launchctl:

launchctl list | grep mongo 

Dừng Mongo công việc:

launchctl stop <job label> 

(Đối với tôi đây là launchctl stop homebrew.mxcl.mongodb)

Bắt đầu công việc mongo:

launchctl start <job label> 
+0

Điều này phù hợp với tôi. – realhu

2

Đây là câu hỏi cũ, nhưng cũng là câu hỏi mà tôi tìm thấy khi tìm kiếm.

Nếu bạn cài đặt với brew thì giải pháp sẽ thực sự là điều này:

launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.mongodb.plist

11

Cách đơn giản là để có được quá trình id của MongoDB và giết nó. Xin lưu ý KHÔNG SỬ DỤNG giết -9 pid cho điều này vì nó có thể gây thiệt hại cho cơ sở dữ liệu.

vậy, 1. lấy pid của MongoDB

$ pgrep Mongo

bạn sẽ nhận được pid của Mongo, Bây giờ

$ giết

Bạn có thể sử dụng kill -15 như well