无法启动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\logs
和c:\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上推送以纠正注册的服务参数:
- 下载MongoDB并将其解压到C:\驱动器。
- 在“C:\ mongodb165”目录下添加“data”和“logs”子目录。
- 在“C:\ mongodb165 \ logs \ mongolog.txt”中添加一个日志文件名“mongolog.txt”。
- 将目录更改为“C:\ mongodb165 \ bin”。
-
执行以下命令:
mongod --install --rest –master –logpath=C:\mongodb165\logs\mongolog.txt
-
打开registry编辑器(regedit.exe),转到HKEY_LOCAL_MACHINE→SYSTEM→CurrentControlSet→Services。
-
findMongoDB键并将“ImagePath”值设置为:
C:\mongodb165\bin\mongod --service --rest --master --logpath=C:\mongodb165\logs\mongolog.txt --dbpath=C:\mongodb165\data
-
保存对registry的更改并退出registry编辑器。
- 打开ComponentServices,点击“Services(Local)”,findMongoDB服务。 启动它。
- 检查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的步骤
-
从mongodb网站下载.msi文件 – > https://www.mongodb.com/download-center?jmp=nav#community并运行它;
-
无论您下载的是哪个mondoDb(通常位于C盘的Program Files文件夹中),转至该文件夹,并在同一文件夹的bin文件夹中的任何位置创build数据文件夹和日志文件夹
3.在你的数据文件夹里面创build你的数据库文件夹
结构看起来像这样
-
现在以pipe理员身份打开命令提示
-
改变你的文件path,并进入bin文件夹(在这种情况下,它将是c>程序文件> MongoDB> bin>)
-
input以下命令: mongod –directoryperdb –dbpath“C:/ Program Files \ MongoDB \ data”–logpath“C:\ Program Files \ MongoDB \ log \ mongo.log”–logappend –rest -安装
-
这将设置日志path和数据库path。 最后运行net start MongoDB 。 希望这可以帮助。
检查你的mongod.cfg文件是否有选项卡。 删除标签解决了我的!
确保在input完整的mongod之前,用右键单击“以pipe理员身份运行”权限打开命令行
花了半个小时的时间来debugging…我终于发现,在“rest”属性之前有单个短划线。
只要尝试在命令行中本地运行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
我所要做的就是清理一些空间,重新启动服务。为我工作。 所以你只需要检查你的日志文件并相应地处理这个问题。