我该如何将MongoDB作为Windows服务运行?

229

我该如何设置MongoDB以便它可以作为Windows服务运行?


1
嗯,这比被接受的答案要多做很多工作 :-(。 - Kees de Kooter
29个回答

387

经过几个小时的尝试,我终于做到了。

请确保:

  1. 您已将<MONGODB_PATH>\bin目录添加到系统变量PATH
  2. 以管理员身份运行命令提示符

步骤:

步骤 1: 执行此命令:

D:\mongodb\bin>mongod --remove

第二步:以管理员身份打开命令提示符后执行此命令:

D:\mongodb\bin>mongod --dbpath=D:\mongodb --logpath=D:\mongodb\log.txt --install

注意:在上面的命令后,您还可以添加--serviceName MongoDB

就是这样!


在命令提示符中执行以上命令。
services.msc

// OR

net start MongoDB

查找MongoDB服务并点击启动。


注意:确保以管理员身份运行命令提示符。

如果您不这样做,您的日志文件(在上面的示例中为D:\mongodb\log.txt)将包含类似于以下内容的行:

2016-11-11T15:24:54.618-0800 I CONTROL  [main] Trying to install Windows service 'MongoDB'
2016-11-11T15:24:54.618-0800 I CONTROL  [main] Error connecting to the Service Control Manager: Access is denied. (5)

如果您尝试从非管理员控制台启动服务(例如在PowerShell中使用net start MongoDBStart-Service MongoDB),则会收到以下响应:

System error 5 has occurred.
Access is denied.

或者这样:

Start-Service : Service 'MongoDB (MongoDB)' cannot be started due to the following error: Cannot open MongoDB service
on computer '.'.
At line:1 char:1
+ Start-Service MongoDB
+ ~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OpenError: (System.ServiceProcess.ServiceController:ServiceController) [Start-Service],
   ServiceCommandException
    + FullyQualifiedErrorId : CouldNotStartService,Microsoft.PowerShell.Commands.StartServiceComman

12
你也可以使用net start MongoDB来启动它,而不是使用services.msc。(mongod建议我这样做。) - Joe
1
这对我有用。如果日志文件路径不存在,必须手动创建它(在示例中,我使用了与Mongo目录不同的路径)。 - dgundersen
起初,Mongo作为一个服务启动,但我的数据库是空的。我只能通过在路径中添加\data来查看我之前存在的数据库:mongod --dbpath=D:\mongodb\data - Jeremy Thille
请确保以管理员身份运行命令提示符 - 它可以完成任务!使用普通权限运行不会写入任何警告,但服务只是没有被创建。权限,权限,权限! - Dzoukr
1
应该是经过验证的答案。 - Logan Wlv
显示剩余2条评论

123

我认为如果你使用 --install 命令行开关运行它,它会将其安装为 Windows 服务。

mongod --install

然而,首先阅读 这篇帖子可能是值得的。当相关注册表键被写入时,似乎存在相对/绝对路径的一些问题。


7
我终于成功安装了,通过执行以下命令实现的: mongod.exe --service - heisthedon
3
看起来你真正需要做的是在命令行中输入完整路径:c:> c:\mongodb\bin\mongod.exe --service。然而,请确保以管理员身份运行命令窗口(特别是在Windows服务器上),否则你将受到用户账户控制的限制。 - JC Grubbs
2
这个代码片段可以节省开发机器设置的时间。https://gist.github.com/serdarb/5102848 - Serdar
3
在运行--install之后,您需要执行net start MongoDB - John
17
需要提供一个日志文件路径,你可以像这样添加数据库路径和日志文件路径:mongod --dbpath="c:\data\db" --logpath="c:\data\db\log.txt" --install,然后你需要运行net start MongoDB来启动服务。 - sivaram636
显示剩余4条评论

65

不仅需要--install,

还需要--dbpath--logpath

在重启操作系统后,您需要手动删除"mongod.lock"


4
+1 表示支持删除 mongod.lock 文件。在 64 位系统上运行 1.8.1 版本仍然存在这个问题。 - SethO
4
最好甚至指定--config并在那里定义dbpath、logpath和其他选项。 - Oleg
3
зңӢиө·жқҘжҲ‘зҡ„Windows 8 x64дёҠзҡ„mongod.lockй”ҷиҜҜе·Із»Ҹиў«дҝ®еӨҚдәҶгҖӮ - Jonathan Czitkovics

64

与其他答案不同,这个答案将会...

在系统重启/重新启动时自动启动服务

MongoDB安装

Windows

(1) 安装MongoDB

(2) 将bin添加到路径中

(3) 创建c:\data\db

(4) 创建c:\data\log

(5) 创建c:\data\mongod.cfg文件并填入以下内容..

systemLog:
    destination: file
    path: c:\data\log\mongod.log
storage:
    dbPath: c:\data\db

(6) 创建一个服务,能够在重启后自动启动,并以管理员身份运行。

sc.exe create MongoDB binPath= "\"C:\Program Files\MongoDB\Server\3.4\bin\mongod.exe\" --service --config=\"C:\data\mongod.cfg\"" DisplayName= "MongoDB" start= "auto"

(7) 启动服务.. 以管理员身份运行..

net start MongoDB

重要提示:即使显示“MongoDB服务已成功启动”,它也可能失败

双重检查,打开控制面板 > 服务,确保 MongoDB 服务的状态为“正在运行”

如果没有,请检查 C:\data\log\mongod.log 日志文件以获取失败原因并修复它

(不要通过控制面板 > 服务启动 MongoDB,请使用 .. net start MongoDB)

(8)最后,在 MongoDB 运行时重新启动计算机,它仍将在重新启动时运行

如果您想停止它..

net stop MongoDB

sc.exe delete MongoDB

谢谢,这对我有用,我只需要在这个命令中将3.4更改为3.6版本:sc.exe create MongoDB binPath= "\"C:\Program Files\MongoDB\Server\3.6\bin\mongod.exe\" --service --config=\"C:\data\mongod.cfg\"" DisplayName= "MongoDB" start= "auto" - guru_007

33
以下步骤适用于Windows操作系统。 在一个具有管理员权限cmd窗口中运行以下命令。
mongod --remove

这将删除现有的MongoDB服务(如果有的话)。

mongod --dbpath "C:\data\db" --logpath "C:\Program Files\MongoDB\Server\3.4\bin\mongod.log" --install --serviceName "MongoDB"
请注意确保C:\data\db文件夹已存在。

使用以下方法打开服务:

services.msc

查找 MongoDB -> 右键单击 -> 启动


1
完美!小提醒,文件夹必须存在(至少是日志文件夹)。 - Diego Jancic
关于旁注的一个小问题:文件本身不也需要存在吗?我模糊地记得,即使是空文件本身的缺失也会给我带来麻烦。 - Fariz
1
完美的解决方案。 - sapatelbaps

21
您可以使用以下命令将MongoDB作为Windows服务运行。
"C:\mongodb\bin\mongod" --bind_ip  yourIPadress  --logpath  "C:\data\dbConf\mongodb.log"  --logappend  --dbpath  "C:\data\db"  --port yourPortNumber --serviceName "YourServiceName" --serviceDisplayName "YourServiceName" --install 
如果您使用默认参数使用mongodb,则可以使用以下值:
  • yourIPadress:127.0.0.1或localhost
  • yourPortNumber:27017(默认端口)或不指定--port
  • serviceDisplayName:仅在运行多个服务时使用(自mongodb 1.8以来)
关于此命令的更多信息请参阅http://www.mongodb.org/display/DOCS/Windows+Service

17

14

这个 PowerShell 脚本将 MongoDB 下载并安装为 Windows 服务:

Set-ExecutionPolicy RemoteSigned

$mongoDbPath = "C:\MongoDB" 
$mongoDbConfigPath = "$mongoDbPath\mongod.cfg"
$url = "http://downloads.mongodb.org/win32/mongodb-win32-x86_64-2008plus-2.4.9.zip" 
$zipFile = "$mongoDbPath\mongo.zip" 
$unzippedFolderContent ="$mongoDbPath\mongodb-win32-x86_64-2008plus-2.4.9"

if ((Test-Path -path $mongoDbPath) -eq $True) 
{ 
  write-host "Seems you already installed MongoDB"
    exit 
}

md $mongoDbPath 
md "$mongoDbPath\log" 
md "$mongoDbPath\data" 
md "$mongoDbPath\data\db"

[System.IO.File]::AppendAllText("$mongoDbConfigPath", "dbpath=C:\MongoDB\data\db`r`n")
[System.IO.File]::AppendAllText("$mongoDbConfigPath", "logpath=C:\MongoDB\log\mongo.log`r`n")
[System.IO.File]::AppendAllText("$mongoDbConfigPath", "smallfiles=true`r`n")
[System.IO.File]::AppendAllText("$mongoDbConfigPath", "noprealloc=true`r`n")

$webClient = New-Object System.Net.WebClient 
$webClient.DownloadFile($url,$zipFile)

$shellApp = New-Object -com shell.application 
$destination = $shellApp.namespace($mongoDbPath) 
$destination.Copyhere($shellApp.namespace($zipFile).items())

Copy-Item "$unzippedFolderContent\*" $mongoDbPath -recurse

Remove-Item $unzippedFolderContent -recurse -force 
Remove-Item $zipFile -recurse -force

& $mongoDBPath\bin\mongod.exe --config $mongoDbConfigPath --install

& net start mongodb

11

这是唯一对我有效的方法,因为所有内容都必须是绝对路径:

C:\Program Files\MongoDB\Server\3.2\bin>mongod --install --dbpath=c:/data/db --logpath=c:/data/logs/log.txt

我也必须从 管理员命令提示符 运行它。


7
推荐的方法mongod --install会出现错误:
2015-12-03T18:18:28.896+0100 I CONTROL  --install has to be used with a log file for server output

在将mongodb安装在C:\mongodb之后,你只需要添加logpath即可:

mongod --install --logpath C:\mongodb\logs\mongo.log

日志文件的路径必须存在且为绝对 Windows 路径。然后通过输入以下命令来启动 MongoDB 服务:

net start MongoDB

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