MongoDB su Ubuntu non verrà avviato come servizio, niente nel registro

Sto eseguendo MongoDB 2.2 su Ubuntu e se corro:

sudo mongod 

Ottengo un errore che non riesce a trovare / data / db, che non è dove si trova il database. In mongod.conf il percorso del database è specificato come predefinito di Ubuntu 10gen /var/lib/mongodb che è dove si trova il db. Sembra che mongod non trovi il file conf. Quindi quando corro:

 sudo mongod -f /etc/mongodb.conf 

Il server si avvia correttamente e l’output viene registrato nel file di log: /var/log/mongodb/mongodb.log . Tutto è felice. Posso passare a un’altra shell, accedere alla shell mongo, vedere i database ed eseguire le query.

Quindi, annullo e cerco di eseguire come servizio:

 > sudo status mongodb mongodb stop/waiting > sudo start mongodb mongodb start/running, process 10468 

Sembra buono finora, ma il server mongo non è stato avviato. Esecuzione di un altro:

 > sudo status mongodb mongodb stop/waiting > mongo MongoDB shell version: 2.2.0 connecting to: test Sat Sep 1 19:07:43 Error: couldn't connect to server 127.0.0.1:27017 src/mongo/shell/mongo.js:91 exception: connect failed 

“test” non è il database corretto e non appare nulla nel file di registro.

Sono in perdita per ciò che potrebbe essere sbagliato. Ho controllato gli script di upstart e sembrano a posto. /etc/init/mongodb.conf esegue:

 mongodb --exec /usr/bin/mongod -- --config /etc/mongodb.conf 

OK, tutto si riduce alle autorizzazioni, ma facciamolo passo dopo passo. Quando esegui sudo mongod non carica affatto un file di configurazione, inizia letteralmente con la compilazione in default – porta 27017 , percorso del database di / data / db ecc. – ecco perché hai l’errore di non riuscire a trovare quella cartella. Il “default di Ubuntu” viene usato solo quando lo si punta sul file di configurazione (se si inizia a usare il comando di servizio, questo viene fatto dietro le quinte).

Quindi lo hai eseguito in questo modo:

 sudo mongod -f /etc/mongodb.conf 

Se prima non ci fossero stati problemi, allora ci sarà ora – hai eseguito il processo, con la tua normale configurazione (indicando il tuo solito dbpath e log) come utente root. Ciò significa che ci saranno ora un numero di file nella normale cartella MongoDB con l’utente: gruppo di root:root .

Ciò causerà errori quando si tenta di riavviarlo come servizio normale di nuovo, perché l’utente mongodb (che il servizio tenterà di eseguire come) non avrà il permesso di accedere a tali file root:root e, soprattutto, probabilmente non lo farà essere in grado di scrivere nel file di registro per darti qualsiasi informazione

Pertanto, per eseguirlo come un normale servizio, è necessario correggere tali permessi. Innanzitutto, assicurati che MongoDB non sia attualmente in esecuzione come root, quindi:

 cd /var/log/mongodb sudo chown -R mongodb:mongodb . cd /var/lib/mongodb sudo chown -R mongodb:mongodb . 

Questo dovrebbe risolverlo (supponendo che l’utente: gruppo sia mongodb:mongodb ), anche se probabilmente è meglio verificare con un ls -al o simile per essere sicuri. Una volta fatto, dovresti riuscire a riavviare il servizio.

Per prima cosa conferma che l’utente / gruppo di mongodb ha il permesso di scrivere sia nella directory dei dati che nel file di registro :

$ sudo chown -R mongodb: mongodb / var / lib / mongodb /.

$ sudo chown -R mongodb: mongodb /var/log/mongodb.log

Avvia MongoDB come Daemon (processo in background) usando il seguente comando:

$ mongod –fork –dbpath / var / lib / mongodb / –smallfiles –logpath /var/log/mongodb.log –logappend

Per arrestare MongoDB inserisci la CLI di Mongo, accedi all’amministratore ed esegui il comando shutdown:

$ ./mongo

> usa admin

> db.shutdownServer ()

Rif: http://www.mongodb.org/display/DOCS/Starting+and+Stopping+Mongo

Anch’io ho avuto lo stesso problema. Così sono andato su cd / var / lib / mongodb / e ho cancellato il file mongod.lock Poi ha funzionato per me.

Niente ha funzionato per me, quindi ho scoperto che si trattava di un problema di autorizzazioni nella /tmp :

 sudo chmod 1777 /tmp sudo chown root:root /tmp 

Dopo aver controllato tutti i permessi nelle cartelle di dati, journal e log come suggerito da @nelsonic, il mio problema è stato risolto dando il permesso di bloccare il file nella cartella / tmp

 sudo chown mongod:mongod mongodb-27017.sock 

Lo stavo eseguendo come un’istanza Amazon AWS di Amazon. L’ho capito eseguendo come utente mongod come sotto, e poi, ricercando il codice di errore. Potrebbe essere utile per altri problemi.

 sudo -S -u mongod mongod -f /etc/mongod.conf 

Nessuna delle risposte di cui sopra ha funzionato per me. Alla fine l’ho capito eseguendo il debug dello script di init con:

sudo bash -x /etc/init.d/mongodb start

E vedendo stava passando il percorso errato di configurazione a mongod. Ho semplicemente cambiato la riga in /etc/init.d/mongodb da “CONF = / etc / mongodb.conf” a “CONF = / etc / mongod.conf”. La versione 2 usa il primo, e l’installazione della versione 3 ha aggiunto /etc/mongod.conf con il nuovo formato ma a quanto pare non ha aggiornato lo script di init.

AGGIORNAMENTO: Ora ho un problema molto più strano in cui lo script init funziona, ma solo se lo eseguo con “sudo bash -x /etc/init.d/mongodb start” e non con “sudo service mongodb start”. La stessa cosa per la fermata.

Dopo che nessuna delle risposte di cui sopra ha funzionato per me, l’eliminazione del mio file di registro ha riportato in vita Mongo.

In questi giorni questo errore può verificarsi se hai aggiornato mongod e sei in esecuzione e il vecchio database. Mongod userà il motore wiredTiger per impostazione predefinita e avrai un database mmapv1

modifica le impostazioni del motore in /etc/mongod.conf

 # engine: wiredTiger engine: mmapv1 

Attento: YAML è sensibile agli spazi bianchi

journalctl / systemd non vedrà questo problema. Controllare il log di mongod in /var/log/mongodb/mongod.log

Presumo che tu possa convertire il database con qualcosa come i passi descritti qui

https://docs.mongodb.com/manual/tutorial/change-standalone-wiredtiger/

Prova questo comando:

 sudo chown mongodb /tmp/mongodb-27017.sock