Por*_*ori 14 linux fedora mongodb
我正在运行Fedora 20并根据官方文档中的Red Hat安装指南安装MongoDB .我能够运行mongod守护进程没有错误的第一次服务,但是当我关闭了我的机器和回来的时候,拒绝服务,由于一些失败的开始.
在我成功运行后列出的日志中,我看到了:
***** SERVER RESTARTED *****
ERROR: Cannot write pid file to /var/run/mongodb/mongod.pid: No such file or directory
Run Code Online (Sandbox Code Playgroud)
如果我尝试手动启动mongod或运行mongod --repair,我会在启动失败时收到此消息:
ERROR: dbpath (/data/db) does not exist.
Create this directory or give existing directory in --dbpath.
Run Code Online (Sandbox Code Playgroud)
考虑到在我的配置文件中/etc/mongod.conf,数据库路径的设置如下:
dbpath=/var/lib/mongo
Run Code Online (Sandbox Code Playgroud)
最后,如果我运行此命令:
mongod --dbpath /var/lib/mongo
Run Code Online (Sandbox Code Playgroud)
守护进程很好.但是,我无法复制启动服务的无错误行为.
任何人都可以告诉我究竟是什么问题以及如何开始mongod作为服务运行?
编辑
如果我跑,我会收到此消息mongod --config /etc/mongod.conf:
about to fork child process, waiting until server is ready for connections. forked process: 2702 ERROR: child process failed, exited with error number 1
该/var/run/mongodb目录不存在,因此我创建并将其分配给mongod用户.遗憾的是,这并没有太大的区别.
我的/var/log/mongodb/mongod.log消息显示:
[initandlisten] exception in initAndListen: 10309 Unable to create/open lock file: /var/lib/mongo/mongod.lock errno:13 Permission denied Is a mongod instance already running?, terminating
Way*_*yne 32
在Fedora 20上对我有用的是:我们需要在每次启动时创建临时目录,并由systemd-tmpfiles处理.因此,创建一个文件/lib/tmpfiles.d/mongodb.conf并在其中放入一行:
d /var/run/mongodb 0755 mongod mongod
Run Code Online (Sandbox Code Playgroud)
这似乎是在重启时处理的; 如果您不想立即重新启动,可以使用以下命令执行:
sudo systemd-tmpfiles --create mongodb.conf
Run Code Online (Sandbox Code Playgroud)
(参见systemd-tmpfiles的手册页)
我有同样的问题,我暂时解决了,禁用SELinux,重启机器,淘汰了mongod.lock:
#rm /var/lib/mongo/mongod.lock
Run Code Online (Sandbox Code Playgroud)
通过创建文件/var/run/mongodb/mongo.pid(如配置文件/etc/mongod.conf中所述):
#mkdir /var/run/mongodb
#touch /var/run/mongodb/mongod.pid
Run Code Online (Sandbox Code Playgroud)
并授予777权限:
#chmod 777 /var/run/mongodb/mongod.pid
Run Code Online (Sandbox Code Playgroud)
并启动mongo:
#service mongod start
Run Code Online (Sandbox Code Playgroud)
但重启机器后问题仍然存在.文件夹和文件消失.
我花了一些时间研究这个,看起来好像pid文件夹和文件权限不能与默认守护进程一起使用.
我遇到的最简单的解决方案是通过在配置文件中的行前放一个#来禁用pid文件.
vi /etc/mongod.conf
Run Code Online (Sandbox Code Playgroud)
找到说pidfilepath =/var/run/mongodb/mongod.pid的行并相应地更改它.
# pidfilepath=/var/run/mongodb/mongod.pid
Run Code Online (Sandbox Code Playgroud)
有关评论的信息请点击此处查看. http://docs.mongodb.org/manual/reference/configuration-options/#processManagement.pidFilePath
如果您使用以下方法启动mongod作为服务:
sudo服务mongod开始
确保mongod.conf中为logpath,dbpath和pidfilepath定义的目录存在并且由mongod:mongod拥有.