วิธีที่ดีในการหยุด mongod บน Mac OS X คืออะไร?


88

ฉันใช้ mongo 1.8.2 และพยายามดูวิธีปิดเครื่องอย่างหมดจดบน Mac

บนเซิร์ฟเวอร์อูบุนตูของเราฉันสามารถปิด mongo ได้อย่างหมดจดจาก mongo shell ด้วย:

> use admin
> db.shutdownServer()

แต่บน Mac ของฉันมันไม่ได้ฆ่ากระบวนการ mongod ผลลัพธ์แสดงว่า 'ควรจะ' ปิด แต่เมื่อฉัน ps -ef | grep mongo มันแสดงให้ฉันเห็นกระบวนการที่ใช้งานอยู่ นอกจากนี้ฉันยังสามารถเปิด mongo shell และค้นหา dbs ของฉันได้เหมือนไม่เคยปิด

ผลลัพธ์จาก db.shutdownServer () ในเครื่องของฉันคือ:

MongoDB shell version: 1.8.2
connecting to: test
> use admin                  
switched to db admin
> db.shutdownServer()
Tue Dec 13 11:44:21 DBClientCursor::init call() failed
Tue Dec 13 11:44:21 query failed : admin.$cmd { shutdown: 1.0 } to: 127.0.0.1
server should be down...
Tue Dec 13 11:44:21 trying reconnect to 127.0.0.1
Tue Dec 13 11:44:21 reconnect 127.0.0.1 failed couldn't connect to server 127.0.0.1
Tue Dec 13 11:44:21 Error: error doing query: unknown shell/collection.js:150

ฉันรู้ว่าฉันสามารถฆ่ากระบวนการได้ แต่ฉันต้องการทำมันให้หมดจดกว่านี้


คุณเริ่มต้นmongodอย่างไร แค่ที่เปลือก? ใช้launchctl?
dcrosta

คุณมีข้อมูลจากบันทึกหรือไม่? อาจเป็นไปได้ว่า MongoDB กำลัง "รีสตาร์ทอัตโนมัติ" คุณอาจต้องการเรียกใช้--logappendแม้ว่าไฟล์บันทึกใหม่จะเป็นตัวบ่งชี้ที่ชัดเจนว่ากระบวนการเริ่มต้นใหม่
Gates VP

คำตอบ:


175

อาจเป็นเพราะ launchctl กำลังจัดการอินสแตนซ์ mongod ของคุณ หากคุณต้องการเริ่มและปิดอินสแตนซ์ mongod ให้ยกเลิกการโหลดก่อน:

launchctl unload -w ~/Library/LaunchAgents/org.mongodb.mongod.plist

จากนั้นเริ่ม mongod ด้วยตนเอง:

mongod -f path/to/mongod.conf --fork

~/Library/LaunchAgents/org.mongodb.mongod.plistคุณสามารถค้นหาสถานที่ของคุณจาก mongod.conf

หลังจากนั้นdb.shutdownServer()จะทำงานได้ดี

เพิ่ม 22 กุมภาพันธ์ 2014:

หากคุณติดตั้ง mongodb ผ่าน homebrew homebrew มีbrew servicesคำสั่งที่ใช้งานง่าย ในการแสดงบริการที่กำลังทำงานอยู่:

brew services list

ในการเริ่ม mongodb:

brew services stop mongodb-community

หากต้องการหยุด mongodb หากทำงานอยู่แล้ว:

brew services stop mongodb-community

อัปเดต

ในฐานะที่เป็น edufinn ชี้ให้เห็นในความคิดเห็นที่อยู่ในขณะนี้เป็นคำสั่งที่ผู้ใช้กำหนดและสามารถติดตั้งด้วยคำสั่งต่อไปนี้:brew servicesbrew tap gapple/services


23
ในกรณีที่มีใครสนใจตอนนี้หากคุณติดตั้ง mongodb ผ่าน homebrew คุณจะต้องทำlaunchctl stop homebrew.mxcl.mongodbเพื่อหยุด mongodb
Tyler Brock

3
ในเดือนกันยายน 2014 มีการแจ้งการเลิกใช้งานbrewเกี่ยวกับbrew services:$ brew services Warning: brew services is unsupported and will be removed soon.
Pablo Navarro

3
เมื่อธันวาคม 2014 brew servicesได้ถูกลบออก $ brew services Error: Unknown command: services
Hughes

6
brew servicesตอนนี้พร้อมใช้งานเป็นคำสั่งที่ผู้ใช้กำหนดและสามารถติดตั้งได้ด้วยคำสั่งต่อไปนี้: brew tap gapple/services.
edufinn

1
หลังจากฉันเริ่มบริการ mongodb เซิร์ฟเวอร์โหนดของฉันไม่สามารถเชื่อมต่อได้ อย่างไรก็ตามถ้าฉันเริ่ม mongodb จากบรรทัดคำสั่งมันก็ใช้ได้ดี ฉันเดาว่ามันต้องเป็นปัญหาของพอร์ต .. วิธีการตั้งค่าพอร์ตเมื่อเริ่มบริการ?
pravin

35

หากคุณติดตั้ง mongodb ด้วย homebrew มีวิธีที่ง่ายกว่า:

แสดงรายการงาน mongo ด้วย launchctl:

launchctl list | grep mongo

หยุดงาน mongo:

launchctl stop <job label>

(สำหรับฉันนี่คือlaunchctl stop homebrew.mxcl.mongodb)

เริ่มงาน mongo:

launchctl start <job label>

24

วิธีง่ายๆคือรับรหัสกระบวนการของ mongodb และฆ่ามัน โปรดทราบว่าอย่าใช้ kill -9 pid เพราะอาจทำให้เกิดความเสียหายกับฐานข้อมูล

ดังนั้น 1. รับ pid ของ mongodb

$ pgrep mongo

คุณจะได้รับ pid ของ Mongo ตอนนี้

$ ฆ่า

คุณสามารถใช้ kill -15 ได้เช่นกัน


8

หากคุณติดตั้งเซิร์ฟเวอร์ชุมชน mongodb ผ่าน homebrew คุณสามารถทำได้:

brew services list

นี่จะแสดงรายการบริการปัจจุบันดังต่อไปนี้:

Name              Status  User          Plist
mongodb-community started thehaystacker /Users/thehaystacker/Library/LaunchAgents/homebrew.mxcl.mongodb-community.plist

redis             stopped

จากนั้นคุณสามารถรีสตาร์ท mongodb ได้โดยหยุดและรีสตาร์ทก่อน:

brew services stop mongodb
brew services start mongodb

4

ฉันต้องการหยุดเซิร์ฟเวอร์ MongoDB โดยใช้portคำสั่งเอง

sudo port unload mongodb

และเริ่มต้นใหม่อีกครั้ง

sudo port load mongodb

3

ตรวจสอบเอกสารเหล่านี้:

http://www.mongodb.org/display/DOCS/Starting+and+Stopping+Mongo#StartingandStoppingMongo-SendingaUnixINTorTERMsignal

หากคุณเริ่มต้นในเทอร์มินัลคุณควรจะตกลงกับ a ctrl + 'c'- การดำเนินการนี้จะปิดระบบทั้งหมด

อย่างไรก็ตามหากคุณใช้ launchctl มีคำแนะนำเฉพาะสำหรับสิ่งนั้นซึ่งจะแตกต่างกันไปตามวิธีการติดตั้ง

หากคุณใช้ Homebrew ก็จะเป็นเช่นนั้น launchctl stop homebrew.mxcl.mongodb


1

นี่เป็นคำถามเก่า แต่เป็นคำถามที่ฉันพบขณะค้นหาเช่นกัน

หากคุณติดตั้งbrewแล้ววิธีแก้ปัญหาจะเป็นดังนี้:

launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.mongodb.plist


0

หากบริการกำลังทำงานผ่านการชงคุณสามารถหยุดได้โดยใช้คำสั่งต่อไปนี้:

brew services stop mongodb

0

วิธีแก้ปัญหาที่ผู้อื่นใช้ในการทำงานให้ฉัน แต่ไม่ได้ผลสำหรับฉันอีกต่อไปซึ่งมีดังต่อไปนี้

brew services stop mongodb
brew services start mongodb

brew services list ให้

Name              Status  User      Plist
mongodb-community started XXXXXXXXX /Users/XXXXXXXXX/Library/LaunchAgents/homebrew.mxcl.mongodb-community.plist

ดังนั้นฉันจึงใช้mongodb-communityแทนที่mongodbได้ผลสำหรับฉัน

brew services stop mongodb-community
brew services start mongodb-community
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.