无法将MongoDB作为服务启动

69

我已经开发MongoDB几个月了,希望在我的Windows 7 Enterprise机器上安装它作为服务。以下是我执行创建服务的命令:

"D:\Milvia Systems\Development\MongoDB\mongod.exe" --logpath "D:\Milvia Systems\Development\MongoDB\logs\DBLog.log" --logappend --dbpath "D:\Milvia Systems\Development\MongoDB\db" -vvv --reinstall

然而当我使用 "net start MongoDB" 或者服务控制面板时,我会收到以下错误:

Error 1053: 该服务没有及时响应启动或控制请求。

环境:Windows 7 Enterprise 64位操作系统 MongoDB版本:1.6.3,数据文件版本为4.5。


3
在安装MongoDB服务时,我遇到了同样的问题。问题在于我使用了相对路径作为配置文件的路径。 - Darth Egregious
2
你需要管理员权限才能进行此操作。 - Николай Мишин
25个回答

150

你是否检查了日志以查看实际问题?

我建议将Mongo安装提取到c:\ mongodb 中。

创建c:\ mongodb \ logs c:\ mongodb \ data \ db 目录。

然后浏览c:\ mongodb \ bin 目录,并运行以下命令以删除服务(如果已安装):

mongod --remove

然后安装服务,指定日志和数据目录:

mongod --logpath c:\mongodb\logs\mongo.log --dbpath c:\mongodb\data\db --directoryperdb --install

如果服务启动出现问题,你应该在指定的日志文件中看到原因。

更多信息请点击这里


这是日志记录:Tue Jan 11 11:03:11 dbexit:Tue Jan 11 11:03:11 shutdown: going to close listening sockets... Tue Jan 11 11:03:11 shutdown: going to flush oplog... Tue Jan 11 11:03:11 shutdown: going to close sockets... Tue Jan 11 11:03:11 shutdown: waiting for fs preallocator... Tue Jan 11 11:03:11 shutdown: closing all files... Tue Jan 11 11:03:11 closeAllFiles() finished - Martin Reich
1
很高兴你解决了问题。如果有帮助,请将问题标记为答案! - Ciaran Archer
只是想补充一下,你已经在说“创建文件夹”,但更好的做法是指出Mongo不会创建缺失的日志和数据文件夹。 - emrahgunduz
我正在使用mongod.cfg文件配置MongoDB。我遇到了“系统错误1067”的错误。我使用了命令“mongod --remove”,然后是“C:\ mongodb \ bin \ mongod.exe --config C:\ mongodb \ mongod.cfg --install”,现在我的MongoDB作为Windows服务运行良好。 - Pank
创建了c/mongodb/data/db并运行上述命令后,它顺利运行。(Windows 10 - 32位)谢谢。 - Anthony Kal
显示剩余4条评论

17
如果您没有为数据目录或日志目录指定绝对文件路径,则会收到相同的Windows错误,但不会生成日志文件。
我使用了"在Webiyo上发布的Windows 7安装MongoDB服务"的信息来更正注册服务参数。
  1. Download MongoDB and extract it to the C:\ drive.
  2. Add "data" and "logs" subdirectories under the "C:\mongodb165" directory.
  3. Add a log file name "mongolog.txt" at "C:\mongodb165\logs\mongolog.txt".
  4. Change the directory to "C:\mongodb165\bin".
  5. Execute the following command:

    mongod --install --rest –master –logpath=C:\mongodb165\logs\mongolog.txt
    
  6. Open the registry editor (regedit.exe), go to HKEY_LOCAL_MACHINE → SYSTEM → CurrentControlSet → Services.

  7. Find the MongoDB key and set the "ImagePath" value to:

    C:\mongodb165\bin\mongod --service  --rest  --master  --logpath=C:\mongodb165\logs\mongolog.txt  --dbpath=C:\mongodb165\data
    
  8. Save the changes to the registry and exit the registry editor.

  9. Open ComponentServices, click on "Services (Local)", and find the MongoDB service. Start it.
  10. Check at the URL http://localhost:28017/ to verify that MongoDB returns stats.

11

我在Windows 7电脑上也遇到了同样的问题。我按照MongoDB文档中的说明进行安装,但除非我在“C:\”目录下,否则它不会让我执行“net start MongoDB”。尽管如此,我不想返回并重新安装MongoDB以遵循上面引用的Webiyo链接中包含的说明。如果您已根据他们的文档安装了MongoDB,并且想要能够从任何项目目录处执行“net start MongoDB”:

前往HKEY_LOCAL_MACHINE > SYSTEM > CurrentControlSet > services > MongoDB

在Name列下双击ImagePath

粘贴以下ImagePath(编辑文件夹目录和名称以满足您的需求):

C:\mongodb\bin\mongod.exe --service  --rest  --master  --logpath=C:\mongodb\log\mongolog.txt  --dbpath=C:\mongodb\data\db --config C:\mongodb\mongod.cfg
请注意,如果您直接复制此 ImagePath 值,并且您的“data”文件夹位于 mongodb 目录中而不是 C:\ 中,请在“mongod.cfg”文件中添加以下行:dbpath=C:\mongodb\data\db 我这样做后,当我运行“net stop MongoDB”时,我收到消息“系统错误 109。管道已终止。” 您也可能会看到它。这个问题已经在 jira.mongodb.org 上得到了充分讨论。
为了节省您阅读所有来回讨论的时间,Tad Marshall 的帖子总结了这个问题:
“... 在2.1.0中它还可以正常工作;之后的更改再次破坏了它。但是是的,您在当前的代码中会遇到此错误消息。”
解释是 mongod.exe 正在从 Windows 服务控制管理器创建的回调线程退出时调用我们,因为它由于 “net stop mongodb” 而调用我们,这会中断它用于创建回调线程的 RPC 管道。我们需要重新组织我们的退出逻辑以避免这样做。
错误消息是这个问题唯一的真实效果; 我们按命令退出,干净地通知 Windows 服务控制管理器我们已停止,但然后“net”命令显示错误消息,因为我们没有以它希望的方式从 RPC 调用中返回。

我知道这个答案有点老,但我想确认一下,在MongoDB 2.6标准版中,这对我有效。 - HarbyUK
只是想确认一下,在Windows 10 / MongoDB 2.6上也适用于我,现在它会自动启动服务。谢谢! - Shivan

8

我的mongod.cfg文件最后两行如下:

#snmp:
mp:

我不知道为什么里面有一个mp:。但是当我手动执行图像路径时

C:\mongodb\bin\mongod.exe --config "C:\mongodb\bin\mongod.cfg" --service

Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MongoDB

我收到了

c:\mongodb\bin>mongod /?C:\mongodb\bin\mongod.exe --config "C:\mongodb\bin\mongod.cfg" --service
Unrecognized option: mp
try 'mongod --help' for more information

因此我将其注释掉,然后服务就没有任何问题地启动了。


1
我曾经遇到过完全相同的问题;不知道为什么Mongo安装程序决定将:mp添加到默认配置中。删除它有助于解决此问题。请注意,在打开配置文件之前,您必须使用管理员权限启动编辑器。 - Dmitri Nesteruk

5

我运行了这个命令:

C:\MongoDB\Server\3.4\bin>net start MongoDB

然后收到了这个消息:

该服务未响应控制功能。输入NET HELPMSG 2186可获取更多帮助。

经过一些尝试和错误,我注意到当按照教程要求命名文件时,教程要求我将文件命名为mongod.conf,但命令却试图引用mongod.cfg

只要我更正了文件名并重新运行命令,

C:\MongoDB\Server\3.4\bin>sc.exe delete MongoDB
[SC] DeleteService SUCCESS

C:\MongoDB\Server\3.4\bin>sc.exe create MongoDB binPath= "\"C:\MongoDB\Server\3.4\bin\mongod.exe\" --service --config=\"C:\MongoDB\Server\3.4\mongod.cfg\"" DisplayName= "MongoDB" start= "auto"
[SC] CreateService SUCCESS

C:\MongoDB\Server\3.4\bin>net start MongoDB
The MongoDB service is starting....
The MongoDB service was started successfully.

服务已成功启动。

5
这是我在Windows 7上安装MongoDB的步骤:
  1. 从MongoDB网站下载.msi文件--> https://www.mongodb.com/download-center?jmp=nav#community,并运行它

  2. 无论你的MongoDB下载到哪里(通常是C盘Program Files文件夹),进入该文件夹,在bin文件夹所在的同一级目录下创建数据文件夹日志文件夹

3.在你的数据文件夹内创建db文件夹

结构应该看起来像这样

  1. 现在以管理员身份打开命令提示符。

  2. 更改您的文件路径并进入bin文件夹。(在这种情况下,它将是c>program files>MongoDB>bin>)

  3. 键入以下命令:mongod --directoryperdb --dbpath "C:/Program Files\MongoDB\data" --logpath "C:\Program Files\MongoDB\log\mongo.log" --logappend --rest --install

  4. 这将设置日志路径和数据库路径。最后运行net start MongoDB。希望这有所帮助。


5

对于其他可能在Windows Server 2012上遇到相同问题的人:

我刚刚在Windows Server 2012上使用Mongo 3.0.3时遇到了同样的问题。我不是系统管理员,所以我不知道他们为sc.exe做了什么更改。我必须使用

sc.exe create MongoDB binPath= "C:\mongodb\bin\mongod.exe --service --config=C:\mongodb\mongod.cfg" DisplayName= "MongoDB" start= "auto"

与其它网站相比,这里无需使用双引号来表示二进制文件路径和配置文件路径。


我使用了这个方法,它起作用了。在此之前,我使用了“--install”命令,虽然没有出现错误,但服务未显示。我从上面的内容中改变了一件事。我没有在“--config”和其路径之间使用等号... - FernandoZ

3

请检查您的mongod.cfg文件是否存在制表符。将其删除后问题得到解决!


3

对于 mongoDB 3.0,你需要在配置文件中设置以下内容。

logpath=E:\mongoDBdata\log\mongoDB.log
dbpath=E:\mongoDBdata\db

日志路径应该以文件结尾而不是文件夹。


我也遇到了同样的问题。尽管我已经正确配置了config文件、dbpath条目和它们的路径,但我设置的日志路径是不正确的。 - Steve Johnson

3

以下内容适用于MongoDB 3.6.0

请确保您拥有以下文件夹:

  • C:\mongodb\data
  • C:\mongodb\data\db

然后只需要运行以下指令:

  • mongod --directoryperdb -dbpath C:\mongodb\data\db --logpath C:\mongodb\log\mongo.log --logappend --service --install
  • net start MongoDB
  • mongo

谢谢,这个表单起作用了。我将命令从--rest更改为--service,并从微软网站下载了vc_redist.x64.exe,然后重新启动电脑并运行此命令,它起作用了。 - Abdullah Alkurdi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接