Mongodb

重新啟動時出現問題 - MongoDB

  • February 6, 2022

我曾嘗試在機器MongoDB中使用以下命令啟動服務。linux

service mongod restart

我收到以下錯誤

Stopping mongod:                                           [FAILED]
Starting mongod: about to fork child process, waiting until server is ready for connections.
forked process: 1428
all output going to: /data/log/mongod.log
child process started successfully, parent exiting

我的配置文件如下

dbpath = /data/db/
logpath = /data/log/mongod.log
logappend = true
fork = true
port = 27017
pidfilepath = /var/run/mongod.pid
rest = true
maxConns = 12000
oplogSize = 10000
directoryperdb = true
keyFile = /etc/mongod.key
master = true
smallfiles = true

筆記

service mongod status
mongod dead but subsys locked

任何建議都會有所幫助。

$ rm -f / var / lock / subsys / mongod

$ rm -f /var/lib/mongodb/mongod.lock

作為快速修復,您可以刪除/釋放鎖定,例如按照@user57473 提供的響應,即建議執行:

$ rm -f /var/lock/subsys/mongod

和/或

$ rm -f /var/lib/mongodb/mongod.lock

但是,我認為關於所有這些的更多背景資訊可以提供更多洞察力,以便使用者更好地了解正在發生的事情以及修復正在做什麼(正如使用者 @KookieMonster 在他/她的評論中所逃避的那樣,這是理所當然的)


通常,當您啟動系統服務或在 Linux 中使用 init-script 時(不同的 Linux 版本/發行版將經常使用 SystemV、Upstart、SystemD 來啟動和管理服務),該程序****將被啟動(使用程序Id標識 -或Pid)和一個鎖定文件將被添加(通常到預設路徑:/var/lock/subsys/,和擁有權限為644的**root擁有的文件);這些文件的存在足以被視為鎖定狀態,因此您基本上可以通過執行以下命令來創建這些文件sudo touch /var/lock/subsys/foo例如。在這種情況下,將創建一個名為“foo”的鎖,它通常應該與包含 Pid 的同名“foo”程序匹配。鎖定文件的目的類似於程式中的互斥體/信號量——它可以用來確保在任何給定時間只啟動一個服務實例,或者它可以用來確保在出現意外狀態時的一致性。例如,如果一個伺服器突然斷電,它會終止程序但不會刪除鎖定文件。如果伺服器重新啟動,重新啟動服務的嘗試可能會看到沒有目前程序/pid,但目前有一個鎖定文件,這可能表明必須在程序之前呼叫一些恢復處理或清理處理允許正常啟動。

對於 MongoDB,您可以通過執行來啟動 mongodb,這將使用給定的Pid創建一個名為**mongodsudo service mongod的執行程序,並在路徑*/var/lock/subsys/mongod**創建*具有相同名稱的鎖定文件mongod 。通常,當您正常/正確關閉服務時,您可能會使用類似的命令sudo service mongod stop這將停止正在執行的程序並刪除鎖定文件。但是,如果您的 mongod 服務程序意外終止但留下了此鎖定文件,則可能表示電源故障,或者可能發生了一些錯誤 - 這就是為什麼您應該檢查日誌文件以確定發生了什麼的原因。啟動備份時,這些鎖定文件可能表明程序需要在程序能夠啟動之前或在數據庫可用之前確保數據一致性。

有關subsys 鎖定文件的更多資訊,請參見此處

引用自:https://dba.stackexchange.com/questions/57134