我已经使用本教程安装了Mongodb 3.0 -
https://docs.mongodb.com/v3.0/tutorial/install-mongodb-on-amazon/
安装得很好。我还为所有数据和日志文件夹(即var / lib / mongo和var / log / mongodb)授予'ec2-user'权限,但也设置了conf
文件。
现在问题是mongodb服务器始终无法以命令
启动sudo service mongod start
它只是说failed
,没有别的。
如果我运行命令 -
mongod --dbpath var/lib/mongo
它正确启动了mongodb服务器(虽然我在.conf
文件中也提到过相同的dbpath)
我在这里做错了什么?
答案 0 :(得分:1)
当您运行sudo mongod
时,它根本不加载配置文件,它实际上从编译的默认值开始 - 端口27017,/ {/ 3 /} / {/ 3}等等 - 这就是为什么你得到关于无法找到该文件夹的错误。 “Ubuntu默认值”仅在您将其指向配置文件时使用(如果您开始使用服务命令,则在幕后为您完成)。
接下来你按照这样运行:
sudo mongod -f /etc/mongodb.conf
如果以前没有问题,那么现在就会有 - 您已经使用正常配置(指向通常的dbpath和日志)作为root用户运行该进程。这意味着现在将在用户正常的MongoDB文件夹中存在许多文件:root:root
组。
当您尝试再次将其作为普通服务启动时,这将导致错误,因为mongodb用户(服务将尝试运行该用户)将无权访问这些root:root
文件,最值得注意的是,它可能无法写入日志文件以提供任何信息。
因此,要将其作为普通服务运行,我们需要修复这些权限。首先,确保MongoDB当前没有以root身份运行,然后:
cd /var/log/mongodb
sudo chown -R mongodb:mongodb .
cd /var/lib/mongodb
sudo chown -R mongodb:mongodb .
应该修复它(假设用户:组是mongodb:mongodb
),尽管最好用ls -al
或类似的方式进行验证以确定。完成此操作后,您应该能够再次成功启动服务。
如果您使用以下方式启动mongod作为服务:
sudo service mongod start
确保mongod.conf中为logpath,dbpath和pidfilepath定义的目录存在并归mongod所有:mongod。