2011-12-13 17 views
56

eseguo mongo 1.8.2 e sto provando a vedere come chiuderlo in modo pulito su Mac.Qual è un modo pulito per fermare mongod su Mac OS X?

sui nostri server ubuntu posso arresto Mongo in modo pulito dalla shell mongo con:

> use admin 
> db.shutdownServer() 

ma sul mio Mac, non uccide il processo di mongod. l'output mostra che dovrebbe essere 'shutdown ma quando ho ps -ef | grep mongo mi mostra un processo attivo. inoltre, posso ancora aprire una shell mongo e interrogare i miei dbs come se non fosse mai stato arrestato.

l'uscita dal mio db.shutdownServer() è a livello locale:

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 

so che posso solo uccidere il processo, ma mi piacerebbe farlo in modo più pulito.

+0

Come hai iniziato a 'mongod'? Proprio al guscio? Usando 'launchctl'? – dcrosta

+0

Avete qualche informazione dai registri? Potrebbe essere che MongoDB sta "riavviando automaticamente". Potresti voler eseguire '--logappend', anche se un file di registro nuovo di zecca è una chiara indicazione del riavvio del processo. –

risposta

121

Probabilmente è perché launchctl sta gestendo l'istanza mongod. Se si desidera avviare e l'arresto mongod esempio, scaricare quel primo:

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

Poi iniziamo mongod manualmente:

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

È possibile trovare la posizione mongod.conf da ~/Library/LaunchAgents/org.mongodb.mongod.plist.

Successivamente, db.shutdownServer() funzionerebbe perfettamente.

Aggiunto 22 febbraio 2014:

Se è stato installato tramite MongoDB homebrew, homebrew ha in realtà un comando a portata di mano brew services. Per mostrare servizi in esecuzione attuali:

brew services list

Per avviare mongodb:

brew services start mongodb

Per interrompere mongodb se è già in esecuzione:

brew services stop mongodb

Aggiornamento

Come indicato da Edufinn nel commento, brew services è ora disponibile come comando definito dall'utente e può essere installato con il seguente comando: brew tap gapple/services.

+0

era così. Grazie! – emilebaizel

+21

Nel caso in cui qualcuno sia interessato, attualmente, se hai installato mongodb tramite homebrew, dovresti effettivamente eseguire 'launchctl stop homebrew.mxcl.mongodb' per fermare mongodb. –

+3

A settembre 2014 è presente un avviso di ritiro in "brew" relativo a "brew services": "$ brew services Avviso: i servizi di preparazione non sono supportati e verranno rimossi presto. –

4

Preferisco arrestare il server MongoDB utilizzando il comando port.

sudo port unload mongodb 

E riavviarlo.

sudo port load mongodb 
+2

Funziona solo se sono installati macport. –

21

Se è stato installato MongoDB con homebrew, c'è un modo più semplice: lavoro mongo

List con launchctl:

launchctl list | grep mongo 

arresto mongo lavoro:

launchctl stop <job label> 

(per me questo è launchctl stop homebrew.mxcl.mongodb)

lavoro

Inizio mongo:

launchctl start <job label> 
+0

Questo funziona per me. – realhu

2

Questa è una vecchia questione, ma il suo quello che ho trovato durante la ricerca come bene.

Se è stato installato con brew allora la soluzione sarebbe in realtà essere il seguente:

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

11

modo semplice è quello di ottenere l'ID di processo di MongoDB e ucciderlo. Si prega di notare NON USARE kill -9 pid per questo in quanto potrebbe causare danni al database.

così, 1. ottenere il PID di MongoDB

$ pgrep mongo

otterrete pid di Mongo, ora

$ uccidere

È possibile utilizzare uccidere -15 come bene