Qual è un modo pulito per fermare mongod su Mac OS X?


88

Sto eseguendo mongo 1.8.2 e sto cercando di vedere come spegnerlo in modo pulito su Mac.

sui nostri server Ubuntu posso spegnere mongo in modo pulito dalla shell di mongo con:

> use admin
> db.shutdownServer()

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

l'output dal mio db.shutdownServer () localmente è:

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 semplicemente interrompere il processo ma mi piacerebbe farlo in modo più pulito.


Come hai iniziato mongod? Solo al guscio? Usando launchctl?
dcrosta

Hai delle informazioni dai log? Potrebbe essere che MongoDB si stia "riavviando automaticamente". Potresti voler eseguire con --logappend, anche se un nuovo file di registro è una chiara indicazione che il processo è stato riavviato.
Gates VP

Risposte:


175

Probabilmente è perché launchctl sta gestendo la tua istanza mongod. Se vuoi avviare e chiudere l'istanza di mongod, scarica prima quella:

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

Quindi avvia mongod manualmente:

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

Puoi trovare la tua posizione mongod.conf da ~/Library/LaunchAgents/org.mongodb.mongod.plist .

Dopo di che, db.shutdownServer() funzionerebbe perfettamente.

Aggiunto il 22 febbraio 2014:

Se hai installato mongodb tramite homebrew, homebrew ha effettivamente un comodo brew servicescomando. Per mostrare i servizi correnti in esecuzione:

brew services list

Per avviare mongodb:

brew services stop mongodb-community

Per interrompere mongodb se è già in esecuzione:

brew services stop mongodb-community

Aggiornare

Come edufinn sottolineato nel commento, brew servicesè ora disponibile come comando definito dall'utente e può essere installato con i seguenti comandi: brew tap gapple/services.


23
Nel caso qualcuno sia interessato, attualmente, se hai installato mongodb tramite homebrew, dovresti effettivamente farlo launchctl stop homebrew.mxcl.mongodbper fermare mongodb.
Tyler Brock

3
A settembre 2014, c'è un avviso di deprecazione in brewmerito a brew services:$ brew services Warning: brew services is unsupported and will be removed soon.
Pablo Navarro

3
A partire dal dicembre 2014, brew servicesè stato rimosso. $ brew services Error: Unknown command: services
hughes

6
brew servicesè ora disponibile come comando definito dall'utente e può essere installato con comando seguente: brew tap gapple/services.
edufinn

1
Dopo aver avviato il servizio mongodb, il mio server del nodo non è in grado di connettersi ad esso. Tuttavia se avvio il mongodb dalla riga di comando, funziona bene. Immagino che debba essere un problema di porta .. Come impostare la porta quando si avvia il servizio?
pravin

35

Se hai installato mongodb con homebrew, c'è un modo più semplice:

Elenca lavori mongo con launchctl:

launchctl list | grep mongo

Stop mongo job:

launchctl stop <job label>

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

Inizia un lavoro in mongo:

launchctl start <job label>

24

Il modo semplice è ottenere l'ID di processo di mongodb e ucciderlo. Nota NON USARE kill -9 pid per questo in quanto potrebbe causare danni al database.

quindi, 1. prendi il pid di mongodb

$ pgrep mongo

otterrai un pid di mongo, adesso

$ kill

Puoi anche usare kill -15


8

Se hai installato il server della comunità mongodb tramite homebrew, puoi fare:

brew services list

Questo elencherà i servizi correnti come di seguito:

Name              Status  User          Plist
mongodb-community started thehaystacker /Users/thehaystacker/Library/LaunchAgents/homebrew.mxcl.mongodb-community.plist

redis             stopped

Quindi puoi riavviare mongodb fermandoti e riavviando:

brew services stop mongodb
brew services start mongodb

4

Preferisco fermare il server MongoDB usando il portcomando stesso.

sudo port unload mongodb

E per ricominciare.

sudo port load mongodb


1

Questa è una vecchia domanda, ma l'ho trovata anche durante la ricerca.

Se hai installato con, brewla soluzione sarebbe effettivamente questa:

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


0

Se il servizio è in esecuzione tramite brew, puoi interromperlo utilizzando il seguente comando:

brew services stop mongodb

0

Le soluzioni fornite da altri funzionavano per me ma non funzionano più per me, che è come di seguito.

brew services stop mongodb
brew services start mongodb

brew services list

Name              Status  User      Plist
mongodb-community started XXXXXXXXX /Users/XXXXXXXXX/Library/LaunchAgents/homebrew.mxcl.mongodb-community.plist

Quindi ho usato mongodb-communityinvece di quello mongodbche ha funzionato per me

brew services stop mongodb-community
brew services start mongodb-community
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.