하나의 명령으로 mongo DB를 중지하는 방법


159

병원에서 MongoDB를 시작 / 중지 할 수 있어야합니다. 시작하는 것은 매우 간단합니다.

./mongod

그러나 mongo DB를 중지하려면 먼저 열린 mongo 셸을 실행 한 다음 두 명령을 입력해야합니다.

$ ./mongo

관리자 사용

db.shutdownServer ()

그래서 몽고 DB를 한 줄로 멈추는 방법을 모르겠습니다. 어떤 도움?

답변:


226

MongoDB 시작 및 중지 는 MongoDB 매뉴얼에서 다룹니다. 쉘, cli, 드라이버 등을 통해 MongoDB를 중지하는 다양한 옵션에 대해 설명합니다. 또한 MongoDB를 잘못 중지 할 수있는 위험 (예 : 데이터 손상)과 다른 킬 (kill) 신호에 대해 설명합니다.

또한 Ubuntu 또는 Debian 용 패키지 관리자를 사용하여 MongoDB를 설치 한 경우 다음과 같이 mongodb (현재 ubuntu의 mongod)를 중지 할 수 있습니다.

  • 건방진 녀석: sudo service mongod stop

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

또는 Mac OS X에서

또는 Red Hat 기반 시스템에서 :

  • service mongod stop

또는 Windows 라는 서비스로 설치 한 경우 MongoDB:

  • net stop MongoDB

서비스로 설치되지 않은 경우 (Windows 7 이상) 다음을 실행할 수 있습니다.

  • taskkill /f /im mongod.exe

부정확 한 종료 문제, 이러한 시나리오를 피하는 가장 좋은 방법 및 부정확 한 종료시 수행 할 작업에 대한 자세한 내용 은 예기치 않은 종료 후 데이터 복구 를 참조하십시오 .


5
서비스 순서는 sudo service mongodb [start|stop|restart|status]입니다. sudo service stop mongodb결과 : 중지 : 인식 할 수없는 서비스
jacob

2
@ Jacob-우분투에서 이것을 시도했습니다. 맞습니다. 답을 편집했습니다.
Andrew M

5
Mac의 경우 'killall mongod'만 할 수도 있습니다. 그렇게하면 PID를 알 필요가 없습니다.
Jon M

2
또는 Mac : 'ps -ax | grep mongod ', 프로세스 번호를 죽이십시오
Bryan Grace

1
새로운 우분투 18.04에서는 "mongodb"가 아닌> sudo service mongod stop ...을 사용하여 중지 할 수 있습니다
Naseef Ummer

101

말 그대로 원래 질문의 명령과 동등한 한 줄을 원한다면 별칭을 지정할 수 있습니다.

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

서비스를 통한 MongoDB 시작 및 중지에 대한 Mark의 답변은보다 일반적이고 권장되는 관리 방법입니다.


3
좋은 대답입니다. 개발 시스템 (배포하기 전에 복제 세트를 시도)에 여러 인스턴스를 설정하는 경우 그것은 박쥐를하는 데 도움이 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 ... 다음 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 ...
개발자 마리우스 Žilėnas

2
서비스로 설치된 Windows에서는 net stop MongoDB신뢰할 수 없다는 것을 알았 으므로 비슷한 것을 사용했습니다 mongo admin --eval "db.shutdownServer()". 건배!
NateJ

1
@Stennie Windows에서 'net stop MongoDB'를 사용하면 "시스템 오류 1067이 발생했습니다"가 표시됩니다
charan tej

48

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

공식 정보 : http://docs.mongodb.org/manual/tutorial/manage-mongodb-processes/


나는이 방법을 사용하는 것을 좋아하는데, dbpath 없이도 작동하며 하나의 인스턴스 만 실행하면 의미가 있습니다.
radtek

2
2.4.xx에서 최신 버전까지 최신 버전에서는 작동하지 않는 것 같습니다.
alexserver

이것이 실제로 효과가있는 유일한 답입니다.
David Betz

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

복제 세트의 기본에서 실행될 경우 이에 대해 정의 된 동작이 있습니까? db.shutdownServer({force:1,timeoutSecs:0})남아있는 데이터가 2 차로 플러시되는 것을 막는 것처럼 보입니다 . 항상 그런 것은 아닙니다.
Daniel F

30

서버가 터미널에서 포 그라운드 프로세스로 실행중인 경우이를 눌러 수행 할 수 있습니다.

Ctrl-C

실행중인 서버를 완전히 종료하는 또 다른 방법은 shutdown 명령을 사용하는 것입니다.

> use admin
> db.shutdownServer();

그렇지 않으면 kill과 같은 명령을 사용하여 신호를 보낼 수 있습니다. mongod의 PID가 10014 인 경우 명령은 다음과 같습니다.

kill -2 10014

3
kill을 사용하는 것은 좋은 생각이 아닙니다. 이로 인해 DB가 손상되어 다시 시작해야합니다. "mongod 인스턴스를 종료하기 위해 kill -9 (예 : SIGKILL)를 사용하지 마십시오." 문서 : docs.mongodb.org/manual/tutorial/manage-mongodb-processes/…
Jens A. Koch

7
@ JensA.Koch Ya, Nanhe는 -9 신호를 사용하도록 아무에게도 말하지 않았으므로 "kill을 사용하는 것은 좋은 생각이 아닙니다"라고 말하는 것이 정확하지 않습니다. 즉각적인 종료 만 안전하지 않습니다. 정상적인 종료는 완벽하게 안전하며 귀하가 연결 한 문서가이를 보호합니다.
BT

18

나는 신호로 멈추기 위해 공식 MongoDB 문서 를 따랐다 . 사용할 수있는 다음 명령 중 하나는 (PID는 표현 Process IDmongod과정을) :

kill PID

신호 15 (SIGTERM)를 보내거나

kill -2 PID

신호 2 (SIGINT)를 보냅니다.

MongoDB 문서의 경고 : 인스턴스 를 종료하기 위해
절대 kill -9SIGKILL을 사용하지 마십시오 mongod.

하나 이상의 인스턴스가 실행 중이거나 PID에 관심이없는 경우 실행중인 pkill모든 mongod프로세스에 신호를 보내는 데 사용할 수 있습니다 .

pkill mongod

또는

pkill -2 mongod

또는 훨씬 더 안전한 것은 귀하에게 속한 프로세스에만 해당됩니다.

pkill -U $USER mongod

또는

pkill -2 -U $USER mongod

추신
: mongod --shutdown현재 MongoDB 문서에 언급되어 있지만 내 컴퓨터 (macOS, mongodb v3.4.10,와 함께 설치됨 homebrew) 에서 호기심으로 작동하지 않기 때문에이 옵션을 사용했습니다 .
Error parsing command line: unrecognised option '--shutdown'

PPS
(macOS 전용) 누구나 궁금해하기 전에 : 아니오,로
brew services stop mongodb
시작하지 않았기 때문에 명령으로 중지 할 수 없었 습니다
brew services start mongodb.
나는 mongod커스텀 커맨드 라인으로 시작 했다 :-)


훌륭한 답변으로 MongoDB가 SIGTERM 신호를 사용하여 정상적으로 종료 될 수 있음을 확인했습니다. Docker-docs.docker.com/compose/compose-file/#stop_grace_period 에서 MongoDB를 실행하는 것이 중요합니다 . MongoDB가 PID 1을 얻도록하려면 CMD [ "mongod", "option", "option"]를 사용해야하며 Docker가 보낸 신호는 DB에 도달합니다.
laimison

9

사용하다 mongod --shutdown

공식 문서에 따르면 : manage-mongodb-processes /

:디


이것이 내가 찾던 것입니다. 고마워
Gaurav Sharma

프로세스를 종료하지 못했습니다 : errno : 1 작업이 허용되지 않습니다.
htm11h


이것은 나에게만 도움이되었습니다. mongod를 서비스로 사용하지 않았으며 start 명령에 오류가 표시되었습니다. mongod의 인스턴스가 이미 실행 중입니다. 고마워요!
Sanjeet A

8

나의 특별한 경우는 :

이전에 mongod를 시작하십시오.

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

이제 중지하고 싶습니다 mongod.

그리고 공식 문서 Stop mongod Processes를 참조하십시오 .

(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

(2) --shutdown여전히 실패했습니다.

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

(3) --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) 사용 service중지 :

service mongod stop

service mongod status

ps에서 프로세스를 볼 수 Active: inactive (dead)있지만 예상 되었지만 mongod실제로는 여전히 실행 중입니다.

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

그리고 마지막으로 다음 과 같은 방법 으로 mongod를 중지하십시오.

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

지금까지 근본 원인 : 여전히 알 수 없음 ...

위의 솔루션이 도움이되기를 바랍니다.


6

mongostop.bat라는 파일을 만듭니다

다음 코드를 저장하십시오

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

mongostop.bat 파일을 실행하면 성공적으로 mongo가 중지되었습니다


4

명령 행을 사용하여 mongodb 서비스를 시작 또는 중지하는 하나의 라이너;

  1. 서비스 사용을 시작하려면 : NET START MONGODB
  2. 서비스 사용을 중지하려면 NET STOP MONGODB

나는 이것을 직접 사용한다.


Windows에서 해당 명령을 사용하여 이것을 얻습니다. c : \ mongodb \ bin> NET START MONGODB 서비스 이름이 잘못되었습니다. NET HELPMSG 2185를 입력하면 추가 도움말을 볼 수 있습니다. c : \ mongodb \ bin> NET STOP MONGODB 서비스 이름이 유효하지 않습니다. NET HELPMSG 2185를 입력하면 추가 도움말을 볼 수 있습니다.

Windows에서는 먼저 --install 옵션을 사용하여 mongodb를 서비스로 설치해야합니다. 명령은 다음과 유사한 명령을 사용하여 서비스로 설치할 수 있습니다. 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 위의 명령은 관리자 권한으로 실행해야합니다. 그런 다음 Hugo에서 제공 한 net start 및 net stop 명령을 사용할 수 있습니다.
Ed Ost

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

stennie의 답변을 바탕으로 :

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

서버가 종료 된 후 mongo가 db에 다시 연결하려고 시도하는 것이 지연 및 오류 메시지를 유발한다는 것을 알았습니다. 종료 후 quit ()를 추가하면 속도가 빨라지고 메시지가 줄어 듭니다. 그러나 여전히 하나가 있습니다.

또한 컨텍스트를 추가하고 싶습니다-다른 코드에 대한 테스트 케이스의 일부로 mongod를 시작 및 중지하고 있으므로 서비스로 등록하는 것이 사용 사례에 맞지 않습니다. 나는 모든 플랫폼에서 실행되는 것을 끝내기를 바라고 있습니다 (이것은 지금 창에서 테스트되었습니다). mongod 3.6.9를 사용하고 있습니다.



1

Mac의 터미널 창에서 control + c를 누릅니다.


누군가가 이것을 하향 투표했습니다. 실제로 몽고 문서에 따라 몽고를 멈추는 방법 중 하나입니다. 대부분의 상황에서 mongo가 백그라운드에서 또는 악마가 아닌 터미널에서 실행되어야하기 때문에 작동하지 않지만이 솔루션은 "때로는"작동합니다. downvoting 때 이유를 설명하는 것이 좋습니다
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에 대해 알고 있습니다. 문제를 해결하면 문제가 발생합니다.
XiaoYao

죽이는 것은 -9이지만 -15는 신호를 보냅니다.
보리스 이바노프

0

윈도우

PowerShell에서 다음과 같습니다. Stop-Service MongoDB

그런 다음 다시 시작하십시오. Start-Service MongoDB

시작되었는지 확인하려면 다음을 실행하십시오 net start | findstr MongoDB..

참고 : 위의 MongoDB는 서비스로 등록되어 있다고 가정 합니다 .


0

빠르고 쉬운 솔루션을 위해 OS에서 제공 하는 작업 관리자를 활용 하십시오. 아래는 Windows 10의 화면 캡처입니다. 강조 표시된 프로세스를 마우스 오른쪽 단추로 클릭하고 중지를 선택하십시오 . 이미 중지 된 경우 시작을 선택하십시오 .

여기에 이미지 설명을 입력하십시오

참고 : 내부적으로 명령은 Windows / OS에서 제공하는 GUI (작업 관리자)를 사용하여 수동으로 수행해야하는 것과 동일한 작업을 수행합니다. 그러나이 접근법은 연구 / 실습 목적으로 사용되어 시작하기 때문에 차단되지 않습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.