Cara menghentikan mongo DB dalam satu perintah

159

Saya harus dapat memulai / menghentikan MongoDB di cli. Cukup mudah untuk memulai:

./mongod

Tetapi untuk menghentikan mongo DB, saya harus menjalankan shell mongo terbuka terlebih dahulu dan kemudian ketik dua perintah:

$ ./mongo

gunakan admin

db.shutdownServer ()

Jadi saya tidak tahu bagaimana menghentikan mongo DB dalam satu baris. Ada bantuan?

XiaoYao
sumber

Jawaban:

226

Memulai dan Menghentikan MongoDB dicakup dalam manual MongoDB. Ini menjelaskan berbagai pilihan untuk menghentikan MongoDB melalui shell, cli, driver dll. Ia juga merinci risiko penghentian MongoDB yang salah (seperti korupsi data) dan berbicara tentang berbagai sinyal mematikan.

Selain itu, jika Anda telah menginstal MongoDB menggunakan manajer paket untuk Ubuntu atau Debian maka Anda dapat menghentikan mongodb (saat ini mongod di ubuntu) sebagai berikut:

  • Pemula: sudo service mongod stop

  • Sysvinit: sudo /etc/init.d/mongod stop

Atau di Mac OS X

Atau pada sistem berbasis Red Hat :

  • service mongod stop

Atau di Windows jika Anda telah menginstal sebagai layanan bernama MongoDB:

  • net stop MongoDB

Dan jika tidak diinstal sebagai layanan (pada Windows 7+) Anda dapat menjalankan:

  • taskkill /f /im mongod.exe

Untuk mempelajari lebih lanjut tentang masalah shutdown yang tidak bersih, cara terbaik untuk menghindari skenario seperti itu dan apa yang harus dilakukan jika terjadi shutdown yang tidak bersih, silakan lihat: Memulihkan Data setelah Shutdown yang Tidak Terduga .

Mark Hillick
sumber
5
Saya yakin pesanan layanannya sudo service mongodb [start|stop|restart|status]. sudo service stop mongodbhasil dalam: berhenti: layanan tidak dikenal
jacob
2
@ Jacob - Kami baru saja mencoba ini di ubuntu, Anda benar, saya sudah mengedit jawabannya.
Andrew M
5
Untuk Mac, Anda juga bisa melakukan 'killall mongod'. Dengan begitu, Anda tidak perlu tahu PID.
Jon M
2
Atau di Mac: 'ps -ax | grep mongod ', lalu bunuh nomor proses
Bryan Grace
1
Di Ubuntu 18.04 yang baru, saya dapat menghentikannya dengan menggunakan> sudo service mongod stop ... not "mongodb"
Naseef Ummer
101

Jika Anda benar-benar menginginkan satu baris yang setara dengan perintah dalam pertanyaan awal Anda, Anda dapat alias:

mongo --eval "db.getSiblingDB('admin').shutdownServer()"

Jawaban Mark tentang memulai dan menghentikan MongoDB melalui layanan adalah pendekatan administratif yang lebih khas (dan disarankan).

Stennie
sumber
3
Jawaban yang bagus Saat menyiapkan beberapa instance pada mesin pengembangan (mencoba replikasi yang ditetapkan sebelum penyebaran), ada baiknya untuk memiliki .bat start C:\mongodb\bin\mongod.exe --config C:\net2\primary1-pc\mongod.cfg start C:\mongodb\bin\mongod.exe --config C:\net2\secondary1-pc\mongod.cfg ... dan kemudian shutdown.bat C:\mongodb\bin\mongo.exe --eval "db.getSiblingDB('admin').shutdownServer()" --port 27017 C:\mongodb\bin\mongo.exe --eval "db.getSiblingDB('admin').shutdownServer()" --port 27018 C:\mongodb\bin\mongo.exe --eval "db.getSiblingDB('admin').shutdownServer()" --port 27019 ...
Pengembang Marius Žilėnas
2
Pada Windows mana itu terinstal sebagai sebuah layanan, saya menemukan bahwa net stop MongoDBitu tidak dapat diandalkan, jadi saya menggunakan sesuatu yang mirip: mongo admin --eval "db.shutdownServer()". Bersulang!
NateJ
1
@ Harrisnie Ketika saya menggunakan 'net stop MongoDB' di windows itu menunjukkan "System Error 1067 telah terjadi"
charan tej
48

mongod --dbpath /path/to/your/db --shutdown

Info lebih lanjut di official: http://docs.mongodb.org/manual/tutorial/manage-mongodb-processes/

francoisrv
sumber
Saya suka menggunakan cara ini, ini bekerja tanpa dbpath juga, masuk akal jika Anda hanya menjalankan satu instance.
radtek
2
tampaknya tidak berfungsi untuk versi yang lebih baru, dari 2.4.xx ke yang terbaru.
alexserver
Ini adalah satu-satunya jawaban yang saya lihat yang benar-benar berfungsi.
David Betz
6
MacOS 10,12, mongod v3.4.10: Error parsing command line: unrecognised option '--shutdown':-(
t0r0X
Apakah ada perilaku yang ditentukan untuk ini jika dijalankan pada primer dari set replika? Tampaknya berperilaku seperti db.shutdownServer({force:1,timeoutSecs:0})yang akan menghambat pembilasan data yang tersisa ke sekunder. Anda mungkin tidak selalu menginginkan itu.
Daniel F
30

Jika server berjalan sebagai proses latar depan di terminal, ini bisa dilakukan dengan menekan

Ctrl-C

Cara lain untuk mematikan server yang berjalan adalah dengan menggunakan perintah shutdown,

> use admin
> db.shutdownServer();

Kalau tidak, perintah seperti kill dapat digunakan untuk mengirim sinyal. Jika mongod memiliki 10014 sebagai PID, perintahnya adalah

kill -2 10014
Nanhe Kumar
sumber
3
Menggunakan kill bukanlah ide yang baik, ini dapat menyebabkan DB yang rusak, yang membutuhkan perbaikan untuk memulai kembali. "Jangan pernah gunakan kill -9 (yaitu SIGKILL) untuk mengakhiri instance mongod." Documents: docs.mongodb.org/manual/tutorial/manage-mongodb-processes/…
Jens A. Koch
7
@ JensA.Koch Ya, Nanhe tidak memberitahu siapa pun untuk menggunakan sinyal -9, jadi .. mengatakan "menggunakan kill bukanlah ide yang bagus" sama sekali tidak akurat. Hanya penghentian instan yang tidak aman - pembunuhan biasa aman dan dokumentasi yang Anda tautkan ke pendukungnya.
BT
18

Saya mengikuti dokumentasi resmi MongoDB untuk berhenti dengan sinyal. Salah satu dari perintah berikut dapat digunakan (PID mewakili Process IDdari mongodproses):

kill PID

yang mengirim sinyal 15 (SIGTERM), atau

kill -2 PID

yang mengirimkan sinyal 2 (SIGINT).

Peringatan dari dokumentasi MongoDB :
Jangan pernah gunakan kill -9(yaitu SIGKILL) untuk mengakhiri sebuah mongodinstance.

Jika Anda memiliki lebih dari satu instance yang berjalan atau Anda tidak peduli dengan PID, Anda dapat menggunakan pkilluntuk mengirim sinyal ke semua mongodproses yang berjalan :

pkill mongod

atau

pkill -2 mongod

atau, jauh lebih aman, hanya untuk proses milik Anda:

pkill -U $USER mongod

atau

pkill -2 -U $USER mongod

PS
Catatan: Saya terpaksa pilihan ini, karena mongod --shutdown, meskipun disebutkan dalam arus dokumentasi MongoDB , anehnya tidak bekerja pada mesin saya (MacOS, mongodb v3.4.10, diinstal dengan homebrew):
Error parsing command line: unrecognised option '--shutdown'

PPS
(khusus macOS) Sebelum ada yang bertanya-tanya: tidak, saya tidak bisa menghentikannya dengan perintah
brew services stop mongodb
karena saya tidak memulainya dengan
brew services start mongodb.
Saya sudah mulai mongoddengan baris perintah khusus :-)

t0r0X
sumber
Jawaban yang bagus, yang menegaskan bahwa MongoDB dapat dihentikan dengan anggun menggunakan sinyal SIGTERM. Adalah penting jika menjalankan MongoDB di Docker - docs.docker.com/compose/compose-file/#stop_grace_ Period . Perhatikan tambahan bahwa CMD ["mongod", "option", "option"] perlu digunakan untuk memastikan bahwa MongoDB mendapat PID 1, kemudian sinyal yang dikirim oleh Docker akan mencapai DB Anda.
laimison
9

Menggunakan mongod --shutdown

Menurut dokumen resmi: kelola-mongodb-proses /

: D

Shawn Wang
sumber
Ini yang saya cari. Terima kasih banyak.
Gaurav Sharma
Gagal mematikan proses: errno: 1 Operasi tidak diizinkan.
htm11h
Ini yang hanya bekerja untuk saya. Saya tidak memiliki mongod sebagai layanan dan perintah mulai menunjukkan kesalahan adalah contoh mongod sudah berjalan. Terima kasih banyak, teman!
Sanjeet A
8

Kasus khusus saya adalah:

sebelumnya mulai mongod dengan:

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

sekarang, mau berhenti mongod.

dan rujuk Proses berhenti mongod doc resmi , telah mencoba:

(1) shutdownServertetapi gagal:

> use admin
switched to db admin
> db.shutdownServer()
2019-03-06T14:13:15.334+0800 E QUERY    [thread1] Error: shutdownServer failed: {
        "ok" : 0,
        "errmsg" : "shutdown must run from localhost when running db without auth",
        "code" : 13
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
DB.prototype.shutdownServer@src/mongo/shell/db.js:302:1
@(shell):1:1

(2) --shutdownmasih gagal:

# mongod --shutdown
There doesn't seem to be a server running with dbpath: /data/db

(3) perintah mulai sebelumnya menambahkan --shutdown:

sudo -u mongod mongod -f /etc/mongod.conf --shutdown
killing process with pid: 30213
failed to kill process: errno:1 Operation not permitted

(4) gunakan serviceuntuk berhenti:

service mongod stop

dan

service mongod status

tampilkan yang diharapkan Active: inactive (dead)tetapi mongodsebenarnya masih berjalan, untuk dapat melihat proses dari ps:

# ps -edaf | grep mongo | grep -v grep
root     30213     1  0 Feb04 ?        03:33:22 mongod --port PORT --dbpath=/var/lib/mongo

dan akhirnya , benar-benar berhenti mongod dengan:

# sudo mongod -f /etc/mongod.conf --shutdown
killing process with pid: 30213

sampai sekarang, root root: masih belum diketahui ...

Semoga solusi di atas bermanfaat untuk Anda.

crifan
sumber
6

buat file bernama mongostop.bat

simpan kode berikut di dalamnya

 mongo admin --eval "db.shutdownServer()"

jalankan file mongostop.bat dan Anda berhasil menghentikan mongo

Adeojo Emmanuel IMM
sumber
4

Satu liner untuk memulai atau menghentikan layanan mongodb menggunakan baris perintah;

  1. Untuk memulai layanan gunakan: NET START MONGODB
  2. Untuk menghentikan penggunaan layanan: NET STOP MONGODB

Saya menggunakan ini sendiri, itu berhasil.

Pirira
sumber
Saya mendapatkan ini menggunakan perintah-perintah di windows: c: \ mongodb \ bin> NET MULAI MONGODB Nama layanan tidak valid. Bantuan lebih lanjut tersedia dengan mengetik NET HELPMSG 2185. c: \ mongodb \ bin> NET STOP MONGODB Nama layanan tidak valid. Bantuan lebih lanjut tersedia dengan mengetik NET HELPMSG 2185.
Pada windows Anda harus menginstal mongodb terlebih dahulu sebagai layanan menggunakan opsi --install. Perintah yang dapat Anda gunakan adalah perintah yang serupa dengan yang berikut untuk menginstalnya sebagai layanan. mongod - instal --directoryperdb --dbpath C: \ mongodb-win32-x86_64-2.4.6 \ data --path C: \ mongodb-win32-x86_64-2.4.6 \ log \ mongodb.log --logappend - rest Perintah di atas harus dijalankan dengan hak administrator. Setelah itu selesai Anda kemudian dapat menggunakan perintah start dan net stop yang disediakan oleh Hugo.
Ed Ost
3

Dari perintah yang diberikan saya pikir Anda berada di Linux.

Mulai MongoDB:

$ sudo service mongod start
mongod start/running, process XXXXX 

Periksa Status:

$ sudo service mongod status
mongod start/running, process XXXXX 

Hentikan MongoDB:

$ sudo service mongod stop
mongod stop/waiting 
ranafeb14
sumber
2

Membangun jawaban dari stennie:

mongo --eval "db.getSiblingDB('admin').shutdownServer();quit()"

Saya menemukan bahwa mongo sedang mencoba untuk menyambung kembali ke db setelah server dimatikan, yang akan menyebabkan penundaan dan pesan kesalahan. Menambahkan berhenti () setelah shutdown mempercepatnya dan mengurangi pesan, tetapi masih ada satu.

Saya juga ingin menambahkan konteks - Saya memulai dan menghentikan mongod sebagai bagian dari kasus uji untuk kode lain, jadi mendaftar sebagai layanan tidak cocok dengan kasus penggunaan. Saya berharap berakhir dengan sesuatu yang berjalan pada semua platform (ini diuji di windows sekarang). Saya menggunakan mongod 3.6.9

David Fridley
sumber
1

Saya hanya melakukannya:

quit();

Harap dicatat saya menggunakan mongo 3.0.

Mongo

Felipe Alarcon
sumber
Jika Anda menjalankan VM, perintah itu hanya akan menghentikan VM.
htm11h
1

di jendela terminal pada mac Anda, tekan control + c

Shyamal
sumber
Seseorang menurunkan ini. Ini sebenarnya adalah salah satu cara untuk menghentikan mongo menurut dokumentasi mongo. Dalam sebagian besar situasi ini tidak akan berhasil, karena mongo harus berjalan di terminal itu dan tidak di latar belakang atau sebagai setan, tetapi "kadang-kadang" solusi ini akan berhasil. Ketika downvoting, itu bagus untuk menjelaskan mengapa
TanisDLJ
1

Menggunakan homebrew (cara yang disarankan):

Untuk memulai:

brew services start mongodb-community

Untuk berhenti:

brew services stop mongodb-community

nitin.agam
sumber
0

Saya menggunakan skrip startup ini di Ubuntu.

#!/bin/sh

### BEGIN INIT INFO
# Provides:     mongodb
# Required-Sart:
# Required-Stop:
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description: mongodb
# Description: mongo db server
### END INIT INFO

. /lib/lsb/init-functions

PROGRAM=/opt/mongo/bin/mongod
MONGOPID=`ps -ef | grep 'mongod' | grep -v grep | awk '{print $2}'`

test -x $PROGRAM || exit 0

case "$1" in
  start)
     log_begin_msg "Starting MongoDB server"
         ulimit -v unlimited.
         ulimit -n 100000
     /opt/mongo/bin/mongod --fork --quiet --dbpath /data/db --bind_ip 127.0.0.1 --rest   --config /etc/mongod.conf.
     log_end_msg 0
     ;;
  stop)
     log_begin_msg "Stopping MongoDB server"
     if [ ! -z "$MONGOPID" ]; then
kill -15 $MONGOPID
     fi
     log_end_msg 0
     ;;
  status)
     ;;
  *)
     log_success_msg "Usage: /etc/init.d/mongodb {start|stop|status}"
     exit 1
esac

exit 0
Boris Ivanov
sumber
2
Jadi Anda langsung membunuh mongoDB secara langsung, bukan? Saya seorang pemula dari MongoDB, apakah ada salahnya untuk membunuhnya? Saya tahu untuk SQLServer atau Oracle, mereka akan menemui masalah jika kita baru saja membunuh mereka.
XiaoYao
untuk membunuh adalah -9 tetapi -15 kamu mengirim SIGNAL.
Boris Ivanov
0

Windows

Di PowerShell, itu: Stop-Service MongoDB

Kemudian untuk memulainya lagi: Start-Service MongoDB

Untuk memverifikasi apakah itu dimulai, jalankan: net start | findstr MongoDB.

Catatan: Di atas menganggap MongoDB terdaftar sebagai layanan .

kenorb
sumber
0

Silakan manfaatkan Task Manager yang disediakan oleh OS Anda untuk solusi cepat dan mudah. Di bawah ini adalah screengrab dari / untuk Windows 10. Klik kanan pada proses yang disorot dan pilih berhenti . Pilih mulai , jika sudah berhenti.

masukkan deskripsi gambar di sini

Harap Catatan: Secara internal perintah melakukan hal yang sama yang harus Anda lakukan secara manual menggunakan GUI (Task Manager), yang disediakan oleh Windows / OS Anda. Padahal, pendekatan ini digunakan untuk tujuan belajar / berlatih untuk memulai dan Anda tidak akan diblokir karena ini.

tidak mungkin
sumber
-2

CTRL + C

di baris perintah windows

Vincent T.
sumber