Mongo DB bir komutta nasıl durdurulur


159

Ben cli üzerinde MongoDB başlatmak / durdurmak gerekir. Başlamak oldukça basit:

./mongod

Ama mongo DB durdurmak için, önce açık mongo kabuğu çalıştırmak ve sonra iki komut yazın:

$ ./mongo

yönetici kullan

db.shutdownServer ()

Yani mongo DB tek bir satırda durdurmak için nasıl bilmiyorum. Herhangi bir yardım?

Yanıtlar:


226

MongoDB'yi Başlatma ve Durdurma MongoDB kılavuzunda ele alınmıştır. MongoDB'yi kabuk, uç, sürücüler vb. Aracılığıyla durdurmanın çeşitli seçeneklerini açıklar. Ayrıca MongoDB'yi (veri bozulması gibi) yanlış durdurma risklerini ayrıntılarıyla açıklar ve farklı öldürme sinyalleri hakkında konuşur.

Ayrıca, MongoDB'yi Ubuntu veya Debian için bir paket yöneticisi kullanarak yüklediyseniz , mongodb'u (şu anda ubuntu'da mongod) aşağıdaki gibi durdurabilirsiniz:

  • Sonradan görme: sudo service mongod stop

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

Veya Mac OS X'te

Veya Red Hat tabanlı sistemlerde:

  • service mongod stop

Veya Windows'ta şu şekilde bir hizmet olarak yüklediyseniz MongoDB:

  • net stop MongoDB

Ve bir hizmet olarak yüklenmediyse (Windows 7+ sürümünden itibaren) şunları çalıştırabilirsiniz:

  • taskkill /f /im mongod.exe

Temiz olmayan bir kapatmanın sorunları, böyle bir senaryodan en iyi şekilde nasıl kaçınacağınız ve temiz olmayan bir kapatma durumunda ne yapılacağı hakkında daha fazla bilgi için lütfen bkz: Beklenmedik Bir Kapanmadan Sonra Verileri Kurtarma .


5
Hizmet siparişinin olduğuna inanıyorum sudo service mongodb [start|stop|restart|status]. sudo service stop mongodbsonuç: dur: tanınmayan hizmet
jacob

2
@Jacob - Bunu ubuntu'da denedik, haklısın, cevabı düzenledim.
Andrew M

5
Mac için, sadece 'killall mongod' da yapabilirsiniz. Bu şekilde, PID'yi bilmenize gerek yoktur.
Jon M

2
Veya Mac'te: 'ps -ax | grep mongod ', sonra işlem numarasını öldür
Bryan Grace

1
Yeni Ubuntu 18.04'te,> sudo service mongod stop kullanarak durdurabiliyorum ... "mongodb" değil
Naseef Ummer

101

Kelimenin tam anlamıyla orijinal sorunuzdaki komutlara eşdeğer bir satır istiyorsanız, takma ad yapabilirsiniz:

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

Mark'ın MongoDB'yi hizmetler yoluyla başlatma ve durdurma konusundaki cevabı daha tipik (ve önerilen) idari yaklaşımdır.


3
Mükemmel cevap. Geliştirme makinesinde birden fazla örnek ayarlarken (dağıtımdan önce çoğaltma kümesini denerken), bir 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 ...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 ...
.bat'a

2
Bir hizmet olarak yüklü Windows'ta, bunu buldum net stop MongoDBBenzer bir şey kullanılmış, böylece güvenilir değildi: mongo admin --eval "db.shutdownServer()". Şerefe!
NateJ

1
@Stennie Windows üzerinde 'net stop MongoDB' kullandığımda "Sistem Hatası 1067 oluştu" gösteriyor
charan tej

48

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

Daha fazla bilgi için: http://docs.mongodb.org/manual/tutorial/manage-mongodb-processes/


Bu şekilde kullanmayı seviyorum, dbpath olmadan da çalışır, çalışan bir örneğiniz varsa mantıklıdır.
radtek

2
2.4.xx'den en son sürümlere kadar yeni sürümler için çalışmıyor gibi görünüyor.
alexserver

Aslında işe yaradığını gördüğüm tek cevap bu.
David Betz

6
MacOS 10.12, mongod v3.4.10: Error parsing command line: unrecognised option '--shutdown':-(
t0r0X

Çoğaltma kümesinin bir birincilinde çalıştırılırsa bunun için tanımlanmış bir davranış var mı? db.shutdownServer({force:1,timeoutSecs:0})Kalan verilerin ikincil çevrelere temizlenmesini engelleyecek gibi davranıyor gibi görünüyor . Bunu her zaman istemeyebilirsiniz.
Daniel F

30

Sunucu bir terminalde ön plan işlemi olarak çalışıyorsa, bu tuşa basarak yapılabilir.

Ctrl-C

Çalışan bir sunucuyu temiz bir şekilde kapatmanın bir başka yolu, shutdown komutunu kullanmaktır,

> use admin
> db.shutdownServer();

Aksi takdirde, sinyali göndermek için kill gibi bir komut kullanılabilir. Mongod'un PID'si olarak 10014 varsa, komut

kill -2 10014

3
Kill kullanmak iyi bir fikir değildir, bu yeniden başlatma için onarım gerektiren bozuk bir DB'ye yol açabilir. "Bir mongod örneğini sonlandırmak için asla kill -9 (yani SIGKILL) kullanmayın." Dokümanlar: docs.mongodb.org/manual/tutorial/manage-mongodb-processes/…
Jens A. Koch

7
@ JensA.Koch Ya, Nanhe kimseye bir -9 sinyali kullanmasını söylemiyordu, bu yüzden .. "öldürmeyi kullanmak iyi bir fikir değil" demek doğru değil. Sadece anında sonlandırma güvensizdir - normal bir öldürme tamamen güvenlidir ve bağlandığınız belgeler onu savunur.
BT

18

Sinyallerle durmak için resmi MongoDB belgelerini izledim . Kullanılabilecek aşağıdaki komutları bir (PID temsil Process IDait mongodişlemi):

kill PID

sinyal 15 (SIGTERM) gönderen veya

kill -2 PID

sinyal 2 gönderir (SIGINT).

MongoDB belgelerinden uyarı : Bir örneği sonlandırmak için
asla kill -9(örn. SIGKILL) kullanmayın mongod.

Çalışan birden fazla örneğiniz varsa veya PID ile ilgilenmiyorsanız pkill, sinyali çalışan tüm mongodişlemlere göndermek için kullanabilirsiniz :

pkill mongod

veya

pkill -2 mongod

ya da çok daha güvenli, sadece size ait süreçler için:

pkill -U $USER mongod

veya

pkill -2 -U $USER mongod

PS
Not: çünkü böyle bir yola başvurmuştur mongod --shutdownakım belirtildiği halde, MongoDB belgeler , merakla benim makinede işi yapmaz (MacOS, mongodb v3.4.10, birlikte yüklenir homebrew):
Error parsing command line: unrecognised option '--shutdown'

PPS
(macOS'a özgü) Herkes merak etmeden önce: hayır, komutla durduramadım
brew services stop mongodb
çünkü başlatmadım
brew services start mongodb. Özel bir komut satırı ile
başlamıştım mongod:-)


MongoDB'nin SIGTERM sinyali kullanılarak zarif bir şekilde sonlandırılabileceğini doğrulayan harika cevap. MongoDB'yi bir Docker'da çalıştırmanız önemlidir - docs.docker.com/compose/compose-file/#stop_grace_period . MongoDB'nin PID 1 aldığından emin olmak için CMD ["mongod", "seçenek", "seçenek"] 'in kullanılması gerektiğine ek olarak Docker tarafından gönderilen sinyalin DB'nize ulaşacağına dikkat edin.
laimison

9

kullanım mongod --shutdown

Resmi dokümana göre: yönet-mongodb-süreçleri /

: D


Aradığım şey buydu. Çok teşekkürler.
Gaurav Sharma

İşlem öldürülemedi: errno: 1 İşleme izin verilmiyor.
htm11h


Bu sadece benim için çalıştı. Hizmet olarak mongod yok ve start komutu hata gösteren mongod zaten çalışıyor bir örneğidir. Bir ton teşekkürler dostum!
Sanjeet A

8

Özel durumum:

daha önce mongod'u şu şekilde başlatın:

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

şimdi, durmak istiyorum mongod.

ve resmi dokümanı durdur Mongod Süreçlerini durdur , denedi:

(1) shutdownServerancak başarısız oldu:

> 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) --shutdownhala başarısız oldu:

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

(3) önceki başlatma komutu ekleme - kapatma:

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

(4) servicedurdurmak için kullanın :

service mongod stop

ve

service mongod status

Beklenen göstermek Active: inactive (dead)ama mongodaslında hala çalışıyor, çünkü ps sürecini görebilirsiniz:

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

ve son olarak , mongod'u gerçekten durdurun:

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

Şimdiye kadar, temel nedeni: hala bilinmiyor ...

umarım yukarıdaki çözüm sizin için yararlıdır.


6

mongostop.bat adlı bir dosya oluşturun

Aşağıdaki kodu içine kaydedin

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

mongostop.bat dosyasını çalıştırın ve mongo'yu başarıyla durdurdunuz


4

Bir satır komut satırı kullanarak mongodb hizmetini başlatmak veya durdurmak için;

  1. Hizmeti başlatmak için şunu kullanın: NET START MONGODB
  2. Hizmet kullanımını durdurmak için: NET STOP MONGODB

Bunu kendim kullanıyorum, işe yarıyor.


Bunu bu komutları Windows'ta kullanıyorum: c: \ mongodb \ bin> NET START MONGODB Hizmet adı geçersiz. NET HELPMSG 2185 yazarak daha fazla yardım alabilirsiniz. C: \ mongodb \ bin> NET STOP MONGODB Hizmet adı geçersiz. NET HELPMSG 2185 yazarak daha fazla yardım alabilirsiniz.

Pencerelerde önce --install seçeneğini kullanarak mongodb'u bir hizmet olarak yüklemeniz gerekir. Komutları, bir hizmet olarak yüklemek için aşağıdakine benzer bir komut kullanabilirsiniz. mongod --install --directoryperdb --dbpath C: \ mongodb-win32-x86_64-2.4.6 \ data --logpath C: \ mongodb-win32-x86_64-2.4.6 \ log \ mongodb.log --logappend - rest Yukarıdaki komut yönetici ayrıcalıklarıyla çalıştırılmalıdır. Bunu yaptıktan sonra Hugo tarafından sağlanan net start ve net stop komutlarını kullanabilirsiniz.
Ed Ost

3

Verilen komutlardan Linux'ta olduğunuzu düşünüyorum.

MongoDB'yi başlat:

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

Durumu Kontrol Et:

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

MongoDB'yi durdurun:

$ sudo service mongod stop
mongod stop/waiting 

2

Stennie'nin cevabı üzerine inşa:

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

Sunucu kapatıldıktan sonra mongo db yeniden bağlanmaya çalıştığını buldum, bu bir gecikme ve hata mesajları neden olur. Kapatma işleminden sonra quit () eklenmesi işlemi hızlandırır ve iletileri azaltır, ancak yine de bir tane vardır.

Ayrıca bağlam eklemek istiyorum - diğer kod için test senaryolarının bir parçası olarak mongod başlatılıyorum ve durduruyorum, bu yüzden bir hizmet olarak kaydolmak kullanım durumuna uymuyor. Tüm platformlarda çalışan bir şeyle bitirmeyi umuyorum (bu şu anda pencerelerde test edildi). Mongod 3.6.9 kullanıyorum


1

Ben sadece yaptım:

quit();

Lütfen unutmayın mongo 3.0 kullanıyorum.

Mongo


Bir VM'de çalışıyorsanız, bu komut sadece VM'yi durduracaktır.
htm11h

1

Mac'inizdeki terminal penceresinde control + c tuşlarına basın


Birisi bunu küçümsedi. Aslında, mongoyu mongo belgelerine göre durdurmanın yollarından biridir. Çoğu durumda bu işe yaramayacaktır, çünkü mongo o terminalde çalışıyor olmalı ve arka planda ya da şeytan olarak değil, ama "bazen" bu çözüm işe yarayacaktır. Downvoting yaparken nedenini açıklamak güzel
TanisDLJ

1

Homebrew kullanma (önerilen yol):

Başlamak:

brew services start mongodb-community

Durdurmak için:

brew services stop mongodb-community


0

Bu başlangıç ​​komut dosyasını Ubuntu'da kullanıyorum.

#!/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

2
Yani sadece mongoDB'yi doğrudan öldürüyorsun, değil mi? Ben MongoDB'ye yeni başlıyorum, öldürmek için herhangi bir acı var mı? SQLServer veya Oracle için biliyorum, eğer onları öldürürsek problemlerle karşılaşacaklar.
XiaoYao

öldürmek -9 ama -15 u SİNYAL gönderin.
Boris Ivanov

0

pencereler

PowerShell'de: Stop-Service MongoDB

Sonra tekrar başlatmak için: Start-Service MongoDB

O, başlatılmış çalıştırılır olmadığını doğrulamak için: net start | findstr MongoDB.

Not: Yukarıda MongoDB'nin hizmet olarak kaydedildiği varsayılmaktadır .


0

Hızlı ve kolay bir çözüm için işletim sisteminiz tarafından sağlanan Görev Yöneticisi'nden yararlanın . Aşağıda vurgulanan süreç basıp Windows 10. Sağ tıklama için / den screengrab olduğunu durağı . Seç başlatmak zaten durursa,.

resim açıklamasını buraya girin

Lütfen Dikkat: Dahili olarak komutlar, Windows / işletim sisteminiz tarafından sağlanan bir GUI (Görev Yöneticisi) kullanarak manuel olarak yapmanız gerekenle aynı şeyi yapar. Yine de, bu yaklaşım çalışma / uygulama amacıyla kullanılacak ve bu nedenle engellenmeyeceksiniz.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.