एक कमांड में मोंगो डीबी को कैसे रोकें


159

मुझे cli पर MongoDB शुरू / बंद करने में सक्षम होना चाहिए। यह शुरू करने के लिए काफी सरल है:

./mongod

लेकिन मोंगो डीबी को रोकने के लिए, मुझे पहले खुले मोंगो खोल को चलाने की जरूरत है और फिर दो कमांड टाइप करें:

$। / मोंगो

व्यवस्थापक का उपयोग करें

db.shutdownServer ()

इसलिए मुझे नहीं पता कि एक लाइन में मोंगो डीबी को कैसे रोका जाए। कोई मदद?

जवाबों:


226

MongoDB शुरू करना और रोकना MongoDB मैनुअल में शामिल किया गया है। यह शेल, सीएलआई, ड्राइवरों आदि के माध्यम से MongoDB को रोकने के विभिन्न विकल्पों की व्याख्या करता है। यह MongoDB (जैसे डेटा भ्रष्टाचार) को गलत तरीके से रोकने के जोखिमों का भी विवरण देता है और विभिन्न किल संकेतों के बारे में बात करता है।

इसके अतिरिक्त, यदि आपने उबंटू या डेबियन के लिए एक पैकेज मैनेजर का उपयोग करके MongoDB स्थापित किया है, तो आप मोंगोडब (वर्तमान में उबंटू में मंगोल) को रोक सकते हैं:

  • नवोदय: sudo service mongod stop

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

या मैक ओएस एक्स पर

या Red Hat आधारित सिस्टम पर:

  • service mongod stop

या विंडोज पर अगर आपने नाम की सेवा के रूप में स्थापित किया है MongoDB:

  • net stop MongoDB

और अगर सेवा के रूप में स्थापित नहीं है (विंडोज 7+ के अनुसार) आप चला सकते हैं:

  • taskkill /f /im mongod.exe

अशुद्ध शटडाउन की समस्याओं के बारे में अधिक जानने के लिए, इस तरह के परिदृश्य से बचने के लिए सबसे अच्छा तरीका है और अशुद्ध शटडाउन की स्थिति में क्या करें, कृपया देखें: अनपेक्षित शटडाउन के बाद डेटा पुनर्प्राप्त करें


5
मेरा मानना ​​है कि सेवा के लिए आदेश है sudo service mongodb [start|stop|restart|status]sudo service stop mongodbपरिणाम: स्टॉप: अपरिचित सेवा
जेकब

2
@ जैकोब - हमने सिर्फ उबंटू पर यह कोशिश की, आप सही हैं, मैंने जवाब संपादित किया है।
एंड्रयू एम

5
मैक के लिए, आप बस 'किंडल मोंगॉड' भी कर सकते हैं। इस तरह, आपको पीआईडी ​​जानने की जरूरत नहीं है।
जॉन एम

2
या मैक पर: 'ps -ax | grep mongod ', फिर प्रक्रिया संख्या को मारें
ब्रायन ग्रेस

1
नए उबुन्टु 18.04 में, मैं इसे> sudo सर्विस मोंगॉड स्टॉप ... नहीं "mongodb" का उपयोग करने से रोकने में सक्षम हूं
Naseef

101

यदि आप अपने मूल प्रश्न में आज्ञाओं के बराबर एक पंक्ति चाहते हैं, तो आप उपनाम दे सकते हैं:

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

सेवाओं के माध्यम से MongoDB शुरू करने और रोकने पर मार्क का जवाब अधिक विशिष्ट (और अनुशंसित) प्रशासनिक दृष्टिकोण है।


3
बहुत बढ़िया जवाब। विकास मशीन पर कई उदाहरण स्थापित करते समय (तैनाती से पहले प्रतिकृति सेट करने की कोशिश करते हुए) यह एक .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 ... और फिर शटडाउन करने में मदद करता है। 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 ...
डेवलपर Marius ėilėnas

2
विंडोज पर जहां यह एक सेवा के रूप में स्थापित है, मैंने पाया कि net stop MongoDBयह विश्वसनीय नहीं था, इसलिए मैंने कुछ इसी तरह का उपयोग किया mongo admin --eval "db.shutdownServer()":। चीयर्स!
NateJ

1
@Stennie जब मैं 'नेट स्टॉप MongoDB' का उपयोग करता हूँ खिड़कियों पर यह दिखा रहा है कि "सिस्टम एरर 1067 हो गया है"
चरण तेज

48

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

आधिकारिक रूप से अधिक जानकारी: http://docs.mongodb.org/manual/tutorial/manage-mongodb-processes/


मैं इस तरह से प्यार करता हूँ, यह dbpath के बिना भी काम करता है, समझ में आता है अगर आपके पास केवल एक ही उदाहरण है।
राडेकेट

2
ऐसा लगता है कि यह नए संस्करणों के लिए काम नहीं कर रहा है, 2.4.xx से नवीनतम तक।
एलेक्सजेंडर

यह एकमात्र उत्तर है जो मैंने देखा है कि वास्तव में काम किया है।
डेविड बेट्ज़

6
mongod v3.4.10Error parsing command line: unrecognised option '--shutdown'
macOS

क्या इसके लिए एक परिभाषित व्यवहार है अगर यह प्रतिकृति सेट के प्राथमिक पर चलाया जाता है? ऐसा लगता है कि ऐसा व्यवहार किया जा रहा है db.shutdownServer({force:1,timeoutSecs:0})जो सेकेंडरी के लिए शेष डेटा के फ्लशिंग को रोक देगा। आप हमेशा ऐसा नहीं चाह सकते।
डैनियल एफ

30

यदि सर्वर टर्मिनल में अग्रभूमि प्रक्रिया के रूप में चल रहा है, तो इसे दबाकर किया जा सकता है

Ctrl-C

शटडाउन कमांड का उपयोग करने के लिए चल रहे सर्वर को साफ करने का एक और तरीका है,

> use admin
> db.shutdownServer();

अन्यथा, सिग्नल को भेजने के लिए किल जैसी कमांड का उपयोग किया जा सकता है। यदि मोंगॉड के पास पीआईडी ​​के रूप में 10014 है, तो कमान होगी

kill -2 10014

3
किल का उपयोग करना एक अच्छा विचार नहीं है, इससे टूटी हुई डीबी हो सकती है, जिसे पुनरारंभ करने के लिए मरम्मत की आवश्यकता होती है। "मोंगॉड उदाहरण को समाप्त करने के लिए किल -9 (यानी साइकल) का उपयोग कभी न करें।" डॉक्स: docs.mongodb.org/manual/tutorial/manage-mongodb-processes/…
Jens A. Koch

7
@ JensA.Koch हां, नन्हे किसी को भी -9 सिग्नल का उपयोग करने के लिए नहीं कह रहा था, इसलिए .. "मार का उपयोग करना एक अच्छा विचार नहीं है" बस सटीक नहीं है। केवल तत्काल समाप्ति असुरक्षित है - एक सामान्य मार पूरी तरह से सुरक्षित है और प्रलेखन आप इसे अधिवक्ताओं से जुड़ा हुआ है।
BT

18

मैंने संकेतों के साथ रुकने के लिए आधिकारिक MongoDB प्रलेखन का पालन ​​किया । निम्न आदेशों में से एक का उपयोग किया जा सकता है (पीआईडी प्रक्रिया Process IDका प्रतिनिधित्व करता mongodहै):

kill PID

जो सिग्नल 15 (SIGTERM), या भेजता है

kill -2 PID

जो सिग्नल 2 (SIGINT) भेजता है।

MongoDB प्रलेखन से चेतावनी : किसी उदाहरण को समाप्त करने के लिए
कभी भी kill -9(यानी SIGKILL) का उपयोग न करें mongod

यदि आपके पास एक से अधिक उदाहरण चल रहे हैं या आप पीआईडी ​​के बारे में परवाह नहीं करते हैं, तो आप pkillसभी चल रही mongodप्रक्रियाओं को संकेत भेजने के लिए उपयोग कर सकते हैं :

pkill mongod

या

pkill -2 mongod

या, बहुत अधिक सुरक्षित, केवल आपसे संबंधित प्रक्रियाओं के लिए:

pkill -U $USER mongod

या

pkill -2 -U $USER mongod

पुनश्च
नोट: मैंने इस विकल्प का सहारा लिया, क्योंकि mongod --shutdownवर्तमान मोंगोबीडी प्रलेखन में उल्लेख किया गया है , उत्सुकता से मेरी मशीन पर काम नहीं करता है (macOS, mongodb v3.4.10, साथ स्थापित homebrew):
Error parsing command line: unrecognised option '--shutdown'

PPS
(macOS specific) इससे पहले कि कोई अजूबा करे: नहीं, मैं इसे कमांड से नहीं रोक सकता
brew services stop mongodb
क्योंकि मैंने इसे शुरू नहीं किया था
brew services start mongodb
मैं mongodएक कस्टम कमांड लाइन के साथ शुरू किया था :-)


शानदार उत्तर, जिसने पुष्टि की कि MongoDB को SIGTERM सिग्नल का उपयोग करके शालीनतापूर्वक समाप्त किया जा सकता है। यह महत्वपूर्ण है अगर डॉकटर में MongoDB चल रहा है - docs.docker.com/compose/compose-file/#stop_grace_period । अतिरिक्त ध्यान दें कि CMD ["mongod", "विकल्प", "विकल्प"] का उपयोग यह सुनिश्चित करने के लिए किया जाना चाहिए कि MongoDB को PID 1 मिलता है, फिर Docker द्वारा भेजा गया संकेत आपके DB तक पहुंच जाएगा।
laimison

9

उपयोग mongod --shutdown

आधिकारिक डॉक्टर के अनुसार: प्रबंधन-मोंगोडब-प्रक्रिया /

: डी


यह वही है जिसे मैं देख रहा था। बहुत बहुत धन्यवाद।
गौरव शर्मा 11

प्रक्रिया को मारने में विफल: गलत: 1 ऑपरेशन की अनुमति नहीं है।
htm11h

केवल लिनक्स के लिए: docs.mongodb.com/manual/tutorial/manage-mongodb-processes/…
Kirill Gusyatin

यह केवल मेरे लिए काम करता है। मेरे पास सेवा के रूप में मोंगॉड नहीं है और स्टार्ट कमांड त्रुटि दिखा रहा है मोंगॉड का एक उदाहरण पहले से ही चल रहा है। एक टन धन्यवाद, यार!
संजीत ए

8

मेरा विशेष मामला है:

पहले से शुरू mongod द्वारा:

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

अब, बंद करना चाहते हैं mongod

और आधिकारिक डॉक्टर स्टॉप मोंगॉड प्रोसेस का संदर्भ लें , कोशिश की है:

(1) shutdownServerलेकिन असफल:

> 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

(२) --shutdownअभी भी असफल:

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

(3) पिछली शुरुआत कमांड जोड़ना - शटडाउन:

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

(4) serviceरोकने के लिए उपयोग करें:

service mongod stop

तथा

service mongod status

शो अपेक्षित है Active: inactive (dead)लेकिन mongodवास्तव में अभी भी चल रहा है, क्योंकि ps से प्रक्रिया देख सकते हैं:

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

और अंत में , वास्तव में मंगोल द्वारा रोकें:

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

अब तक, मूल कारण: अभी भी अज्ञात ...

समाधान के ऊपर आशा आपके लिए उपयोगी है।


6

mongostop.bat नामक फाइल बनाएं

इसमें निम्न कोड सहेजें

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

फ़ाइल mongostop.bat चलाएं और आपके पास सफलतापूर्वक मोंगो बंद हो गया है


4

कमांड लाइन का उपयोग करके मोंगोडब सेवा शुरू करने या रोकने के लिए एक लाइनर;

  1. सेवा का उपयोग शुरू करने के लिए: NET START MONGODB
  2. सेवा उपयोग को रोकने के लिए: NET STOP MONGODB

मैं खुद इसका इस्तेमाल करता हूं, यह काम करता है।


मुझे विंडोज़ पर उन कमांड का उपयोग करने पर यह मिलता है: c: \ mongodb \ bin> NET START MONGODB सेवा का नाम अमान्य है। NET HELPMSG 2185 टाइप करके अधिक मदद उपलब्ध है। c: \ mongodb \ bin> NET STOP MONGODB सेवा नाम अमान्य है। अधिक सहायता NET HELPMSG 2185 टाइप करके उपलब्ध है।

विंडोज़ पर आपको पहले - इंस्टॉलेशन विकल्प का उपयोग करके एक सेवा के रूप में मोंगॉडब स्थापित करना होगा। आदेश आप इसे सेवा के रूप में स्थापित करने के लिए निम्न के समान आदेश का उपयोग कर सकते हैं। mongod --install --directoryperdb --dbpath C: \ mongodb-win32-x86_64-2.4.6 \ data --logpath C: \ mongodb-win32-x86_64-2.44 \ log \ mongodb.log --logappend - बाकी आदेश ऊपर दिए गए व्यवस्थापक विशेषाधिकारों के साथ चलाया जाना चाहिए। उसके बाद किया जाता है तो आप ह्यूगो द्वारा प्रदान की गई नेट स्टार्ट और नेट स्टॉप कमांड का उपयोग कर सकते हैं।
एड ओस्ट

3

दिए गए आदेशों से मुझे लगता है कि आप लिनक्स पर हैं।

MongoDB प्रारंभ करें:

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

स्थिति की जाँच करें:

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

बंद करो MongoDB:

$ sudo service mongod stop
mongod stop/waiting 

2

स्टेनी से जवाब पर निर्माण:

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

मैंने पाया कि सर्वर बंद होने के बाद mongo db को फिर से कनेक्ट करने की कोशिश कर रहा था, जो देरी और त्रुटि संदेशों का कारण होगा। शटडाउन जोड़ने के बाद (इसे बंद करने की गति बढ़ जाती है) और संदेशों को कम कर देता है, लेकिन अभी भी एक है।

मैं संदर्भ जोड़ना चाहता हूं - मैं अन्य कोड के लिए परीक्षण मामलों के हिस्से के रूप में मोंगोड शुरू और रोक रहा हूं, इसलिए सेवा के रूप में पंजीकरण करना उपयोग के मामले में फिट नहीं होता है। मैं सभी प्लेटफार्मों पर चलने वाली किसी चीज़ के साथ समाप्त होने की उम्मीद कर रहा हूं (यह अभी विंडोज़ में परीक्षण किया गया है)। मैं mongod का उपयोग कर रहा हूँ 3.6.9


1

मैंने बस किया:

quit();

कृपया ध्यान दें कि मैं mongo 3.0 का उपयोग कर रहा हूं।

मोंगो


यदि आप किसी VM में चल रहे हैं, तो वह कमांड VM को रोक देगा।
htm11h

1

अपने मैक पर टर्मिनल विंडो में, कंट्रोल + सी दबाएं


किसी ने इसे ठुकरा दिया। यह वास्तव में, मोंगो प्रलेखन के अनुसार मोंगो को रोकने के तरीकों में से एक है। अधिकांश स्थितियों में यह काम नहीं करेगा, क्योंकि मोंगो को उस टर्मिनल में चलना चाहिए और पृष्ठभूमि में या एक दानव के रूप में नहीं, बल्कि "कभी-कभी" यह समाधान काम करेगा। जब डाउनवोटिंग करना अच्छा है तो यह बताएं कि क्यों
TanisDLJ

1

होमब्रे का उपयोग करना (अनुशंसित तरीका):

शुरू करना:

brew services start mongodb-community

रोकने के लिए:

brew services stop mongodb-community


0

मैं उबंटू पर इस स्टार्टअप स्क्रिप्ट का उपयोग करता हूं।

#!/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
तो आप सीधे सीधे mongoDB को मारें, है ना? मैं MongoDB का आरंभक हूं, क्या इसे मारने का कोई दुख है? मुझे SQLServer या Oracle के लिए पता है, वे समस्याओं को पूरा करेंगे यदि हम उन्हें मारते हैं।
जिओ याओ

को मारने के लिए -9 लेकिन -15 u SIGNAL भेजें।
बोरिस इवानोव

0

खिड़कियाँ

PowerShell में, यह है: Stop-Service MongoDB

फिर इसे फिर से शुरू करने के लिए: Start-Service MongoDB

यह सत्यापित करने के लिए कि क्या यह शुरू हो गया है, चलाएँ net start | findstr MongoDB:।

नोट: मान लिया गया है कि MongoDB एक सेवा के रूप में पंजीकृत है


0

एक त्वरित और आसान समाधान के लिए अपने ओएस द्वारा प्रदान किए गए कार्य प्रबंधक का लाभ उठाएं । नीचे विंडोज 10. के लिए / से स्क्रेंगराब है। हाइलाइट की गई प्रक्रिया पर राइट-क्लिक करें और स्टॉप का चयन करें । यदि पहले से ही बंद है, तो प्रारंभ का चयन करें ।

यहां छवि विवरण दर्ज करें

कृपया ध्यान दें: आंतरिक रूप से कमांड वही काम कर रहे हैं जो आपको मैन्युअल रूप से एक GUI (टास्क मैनेजर) का उपयोग करके करना है, जो विंडोज / ओएस द्वारा प्रदान किया गया है। हालाँकि, इस दृष्टिकोण का उपयोग अध्ययन / अभ्यास के उद्देश्य से शुरू किया जाना है और आप इसके कारण अवरुद्ध नहीं होंगे।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.