无法启动MongoDB作为服务

我几个月来一直在为MongoDB开发,并希望将其作为服务安装在Windows 7 Enterprise计算机上。 以下是我已经执行创build服务的命令:

"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 

但是,每当我使用networking启动“MongoDB”或服务控制面板时,我收到以下错误:

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

环境:Windows 7企业版64位MongoDB:1.6.3 pdfile版本4.5

你有没有检查你的日志,看看真正的问题?

我build议将Mongo安装解压到c:\mongodb

创buildc:\mongodb\logsc:\mongodb\data\db目录。

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

 mongod --remove 

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

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

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

更多信息在这里 。

如果您没有为数据目录或日志目录指定绝对文件path,则会得到相同的Windows错误,但没有日志文件。

我使用了“在Windows 7上安装MongoDB服务”中的信息,在Webiyo上推送以纠正注册的服务参数:

  1. 下载MongoDB并将其解压到C:\驱动器。
  2. 在“C:\ mongodb165”目录下添加“data”和“logs”子目录。
  3. 在“C:\ mongodb165 \ logs \ mongolog.txt”中添加一个日志文件名“mongolog.txt”。
  4. 将目录更改为“C:\ mongodb165 \ bin”。
  5. 执行以下命令:

     mongod --install --rest –master –logpath=C:\mongodb165\logs\mongolog.txt 
  6. 打开registry编辑器(regedit.exe),转到HKEY_LOCAL_MACHINE→SYSTEM→CurrentControlSet→Services。

  7. findMongoDB键并将“ImagePath”值设置为:

     C:\mongodb165\bin\mongod --service --rest --master --logpath=C:\mongodb165\logs\mongolog.txt --dbpath=C:\mongodb165\data 
  8. 保存对registry的更改并退出registry编辑器。

  9. 打开ComponentServices,点击“Services(Local)”,findMongoDB服务。 启动它。
  10. 检查URL http:// localhost:28017 /来validationMongoDB是否返回统计信息。

我刚刚在我的Windows 7机器上遇到同样的问题。 我按照MongoDB Docs中的说明进行安装,但是除非我在“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

我这样做后,当我运行“净停止MongoDB”我得到消息“系统错误109已经发生。pipe道已经结束。 你也可以看到它。 这个消息已经在jira.mongodb.org进行了彻底的讨论 。

为了节省您阅读整个来回讨论的时间,Tad Marshalls总结了这个问题:

“…它在2.1.0中工作正常,以后的更改再次破坏了它,但是,当前代码中出现此错误消息。

解释是mongod.exe正在从由Windows服务控制pipe理器创build的callback线程退出,因为“net stop mongodb”,因此打破了用于创buildcallback线程的RPCpipe道。 我们需要重组退出逻辑来避免这样做。

错误信息是这个问题的唯一真正的效果; 我们根据命令干脆退出,并通知Windows服务控制pipe理器我们已经停止,但是“net”命令显示错误消息,因为我们没有按照预期的方式从RPC调用中返回。

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

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

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

这与二进制文件path和configuration文件path相比,没有“\”。

对于mongoDB 3.0 ,您将不得不在configuration文件中设置以下内容。

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

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

我运行这个命令:

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

并得到这个消息:

该服务没有响应控制function。 通过键入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. 

该服务开始运行良好。

另一种可能失败的方法是运行服务的帐户没有写入数据目录的权限。

在这种情况下,服务将无法创build一个锁文件。

在这种情况下,mongod服务行为很糟糕,进入一个循环开始一个进程,它会立即抛出一个未处理的exception,崩溃等等,每当进程启动时都会重新创build日志文件,所以如果你想要看到错误。

windows服务的默认用户将是localhost \ system。 所以修复的目的是确保这个用户可以写入你的数据库目录,或者以另一个用户身份启动服务。

至less对于2.6版本,您必须创buildmongo.cfg指向的/ data / db /和/ log /文件夹。 MongoDB本身不会这样做,并且在作为服务运行时会抛出这个错误。

这些是我在windows 7上安装mongoDB的步骤

  1. 从mongodb网站下载.msi文件 – > https://www.mongodb.com/download-center?jmp=nav#community并运行它;

  2. 无论您下载的是哪个mondoDb(通常位于C盘的Program Files文件夹中),转至该文件夹,并在同一文件夹的bin文件夹中的任何位置创build数据文件夹日志文件夹

3.在你的数据文件夹里面创build你的数据库文件夹

结构看起来像这样

  1. 现在以pipe理员身份打开命令提示

  2. 改变你的文件path,并进入bin文件夹(在这种情况下,它将是c>程序文件> MongoDB> bin>)

  3. input以下命令: mongod –directoryperdb –dbpath“C:/ Program Files \ MongoDB \ data”–logpath“C:\ Program Files \ MongoDB \ log \ mongo.log”–logappend –rest -安装

  4. 这将设置日志path和数据库path。 最后运行net start MongoDB 。 希望这可以帮助。

检查你的mongod.cfg文件是否有选项卡。 删除标签解决了我的!

确保在input完整的mongod之前,用右键单击“以pipe理员身份运行”权限打开命令行

花了半个小时的时间来debugging…我终于发现,在“rest”属性之前有单个短划线。

mongodb作为服务

只要尝试在命令行中本地运行mongod.exe,就可以在这里得到exception,即mongod调用并尝试解决它。 在我的情况下,这是本地光盘的小可用空间,所以我只是改变目录的位置,并改变Mongocofig文件,现在运行良好。

如果您查看服务详细信息,可以看到启动服务的命令如下所示:

 "C:\Program Files\MongoDB\bin\mongod" --config C:\Program Files\MongoDB\mongod.cfg --service 

MongoDB团队忘了添加" --config选项”,所以只需编辑registry来纠正它,它就可以工作。

我在Windows 8.1上有同样的问题

为我工作的解决scheme是正确指定configuration文件path

HKEY_LOCAL_MACHINE > SYSTEM > CurrentControlSet > services > MongoDB > imagePath的值如下所示:

 "C:\Program Files\MongoDB 2.6 Standard\bin\mongod.exe" --config mongod.cfg --service 

然后,只是我纠正了configuration文件的path来匹配我的实际path:

 "C:\Program Files\MongoDB 2.6 Standard\bin\mongod.exe" --config "d:\mongodb\mongod.cfg" --service 

请记住在开始服务之前创build数据库

 C:\>"C:\Program Files\MongoDB\Server\3.2\bin\mongod.exe" --dbpath d:\MONGODB\DB 2016-10-13T18:18:23.135+0200 I CONTROL [main] Hotfix KB2731284 or later update is installed, no need to zero-out data files 2016-10-13T18:18:23.147+0200 I CONTROL [initandlisten] MongoDB starting : pid=4024 port=27017 dbpath=d:\MONGODB\DB 64-bit host=mongosvr 2016-10-13T18:18:23.148+0200 I CONTROL [initandlisten] targetMinOS: Windows 7/Windows Server 2008 R2 2016-10-13T18:18:23.149+0200 I CONTROL [initandlisten] db version v3.2.8 2016-10-13T18:18:23.149+0200 I CONTROL [initandlisten] git version: ed70e33130c977bda0024c125b56d159573dbaf0 2016-10-13T18:18:23.150+0200 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.1p-fips 9 Jul 2015 2016-10-13T18:18:23.151+0200 I CONTROL [initandlisten] allocator: tcmalloc 2016-10-13T18:18:23.151+0200 I CONTROL [initandlisten] modules: none 2016-10-13T18:18:23.152+0200 I CONTROL [initandlisten] build environment: 2016-10-13T18:18:23.152+0200 I CONTROL [initandlisten] distmod: 2008plus-ssl 2016-10-13T18:18:23.153+0200 I CONTROL [initandlisten] distarch: x86_64 2016-10-13T18:18:23.153+0200 I CONTROL [initandlisten] target_arch: x86_64 2016-10-13T18:18:23.154+0200 I CONTROL [initandlisten] options: { storage: { dbPath: "d:\MONGODB\DB" } } 2016-10-13T18:18:23.166+0200 I STORAGE [initandlisten] wiredtiger_open config: create,cache_size=8G,session_max=20000,eviction=(threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),checkpoint=(wait=60,log_size=2GB),statistics_log=(wait=0), 2016-10-13T18:18:23.722+0200 I NETWORK [HostnameCanonicalizationWorker] Starting hostname canonicalization worker 2016-10-13T18:18:23.723+0200 I FTDC [initandlisten] Initializing full-time diagnostic data capture with directory 'd:/MONGODB/DB/diagnostic.data' 2016-10-13T18:18:23.895+0200 I NETWORK [initandlisten] waiting for connections on port 27017 

然后你可以停止进程Control-C

 2016-10-13T18:18:44.787+0200 I CONTROL [thread1] Ctrl-C signal 2016-10-13T18:18:44.788+0200 I CONTROL [consoleTerminate] got CTRL_C_EVENT, will terminate after current cmd ends 2016-10-13T18:18:44.789+0200 I FTDC [consoleTerminate] Shutting down full-time diagnostic data capture 2016-10-13T18:18:44.792+0200 I CONTROL [consoleTerminate] now exiting 2016-10-13T18:18:44.792+0200 I NETWORK [consoleTerminate] shutdown: going to close listening sockets... 2016-10-13T18:18:44.793+0200 I NETWORK [consoleTerminate] closing listening socket: 380 2016-10-13T18:18:44.793+0200 I NETWORK [consoleTerminate] shutdown: going to flush diaglog... 2016-10-13T18:18:44.793+0200 I NETWORK [consoleTerminate] shutdown: going to close sockets... 2016-10-13T18:18:44.795+0200 I STORAGE [consoleTerminate] WiredTigerKVEngine shutting down 2016-10-13T18:18:45.116+0200 I STORAGE [consoleTerminate] shutdown: removing fs lock... 2016-10-13T18:18:45.117+0200 I CONTROL [consoleTerminate] dbexit: rc: 12 

现在您的数据库已准备就绪,您可以使用该服务启动服务

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

检查一个mongod的进程实例是否已经在运行。 如果是的话,这个服务将不会启动,因为C:\data\db\mongod.lock将被使用。

为了启动MongoDB作为服务,这个文件不应该被任何进程使用。

对我来说,这个问题是错误的目录。 确保从文件资源pipe理器复制粘贴目录,而不是假定文档页面上指定的目录正确。

我开始在需要MongoDB的博客上跟随一个教程。 它有下载和configuration服务的说明。 但由于某些原因,在该教程中启动Windows服务的命令不起作用。 所以我去了MongoDB文档,试着运行这个命令,如mongodb.org-

创buildmongodb服务的命令sc.exe创buildMongoDB binPath =“\”C:\ MongoDB \ bin \ mongod.exe \“–service –config = \”C:\ MongoDB \ bin \ mongodb \ mongod.cfg \“”DisplayName =“MongoDB”start =“auto”

我收到了以下消息:[SC] CreateService SUCCESS

然后我运行这个:net start MongoDB

并得到这个消息:

 The service is not responding to the control function. More help is available by typing NET HELPMSG 2186. 

我在'C:\ MongoDB \ bin \ mongodb \'中创build一个名为'mongod.cfg'的文件。一旦我添加该文件并重新运行命令'net start MongoDB',服务就开始正常运行。

希望这可以帮助。

那么,在我的情况下,我的驱动器上有我的MongoDB数据文件的磁盘空间不足。 我查了一下MongoDB的日志文件

2015-11-11T21:53:54.717 + 0500 E JOURNAL [initandlisten]日志文件空闲空间不足2015-11-11T21:53:54.717 + 0500 I JOURNAL [initandlisten]请在C:\ wamp \ bin \ mongodb \ data \ db \ journal或使用–smallfiles

我所要做的就是清理一些空间,重新启动服务。为我工作。 所以你只需要检查你的日志文件并相应地处理这个问题。