我正在运行Fedora 20并按照官方文档中的Red Hat installation guide安装了MongoDB。我第一次能够将mongod
守护程序作为服务运行而没有错误,但当我关闭机器并返回时,由于某些故障,服务拒绝启动。
在成功运行后列出的我的日志中,我看到了:
***** SERVER RESTARTED *****
ERROR: Cannot write pid file to /var/run/mongodb/mongod.pid: No such file or directory
如果我尝试手动启动mongod
或运行mongod --repair
,我会在启动失败时收到此消息:
ERROR: dbpath (/data/db) does not exist.
Create this directory or give existing directory in --dbpath.
考虑到在/etc/mongod.conf
的配置文件中,数据库路径的设置如下:这是奇怪的:
dbpath=/var/lib/mongo
最后,如果我运行此命令:
mongod --dbpath /var/lib/mongo
守护程序启动就好了。但是,我无法复制启动服务的无错误行为。
任何人都可以告诉我究竟是什么问题以及我如何开始运行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
答案 0 :(得分:31)
Fedora 20对我有用:我们需要在每次启动时创建临时目录,并由systemd-tmpfiles处理。所以,创建一个文件/lib/tmpfiles.d/mongodb.conf并在其中加一行:
d /var/run/mongodb 0755 mongod mongod
似乎在重启时处理它;如果您不想立即重新启动,可以执行以下操作:
sudo systemd-tmpfiles --create mongodb.conf
(参见systemd-tmpfiles的手册页)
答案 1 :(得分:8)
我有同样的问题,我暂时解决了,禁用SELinux,重新启动机器,淘汰了mongod.lock:
#rm /var/lib/mongo/mongod.lock
通过创建文件/var/run/mongodb/mongo.pid(如配置文件/etc/mongod.conf中所述):
#mkdir /var/run/mongodb
#touch /var/run/mongodb/mongod.pid
并授予777权限:
#chmod 777 /var/run/mongodb/mongod.pid
并启动mongo:
#service mongod start
但重启机器后问题仍然存在。文件夹和文件消失。
答案 2 :(得分:7)
我花了一些时间研究这个,看起来好像pid文件夹和文件权限不适用于默认守护程序。
我遇到的最简单的解决方案是通过在配置文件中的行前放一个#来禁用pid文件。
vi /etc/mongod.conf
找到pidfilepath = / var / run / mongodb / mongod.pid的行并相应更改。
# pidfilepath=/var/run/mongodb/mongod.pid
有关评论内容的信息请点击此处查看。 http://docs.mongodb.org/manual/reference/configuration-options/#processManagement.pidFilePath
答案 3 :(得分:5)
如果您使用以下方式启动mongod作为服务:
sudo service mongod start
确保mongod.conf中为logpath,dbpath和pidfilepath定义的目录存在并归mongod所有:mongod。
答案 4 :(得分:1)
我在OpenSuse 13.2上运行mongodb 3.0.4遇到了同样的问题,我发现/ var / run下的mongod目录丢失了。如果我手动创建目录,它将在重新启动后消失。
我通过在/etc/init.d/mongod启动脚本中添加以下行来解决它:
mkdir -p /var/run/mongod
chown $MONGO_USER:$MONGO_GROUP /var/run/mongod
答案 5 :(得分:0)
我们需要创建由systemd-tmpfiles处理的pidfile /var/run/mongodb
的 temp dir 位置。因此,以root身份创建一个文件/lib/tmpfiles.d/mongodb.conf:
LNX#> sudo su
LNX#> cd /lib/tmpfiles.d
LNX#> echo“d / var / run / mongodb 0755 mongod mongod”> mongodb.conf
然后重启或运行此命令以激活该临时目录:
lnx#> sudo systemd-tmpfiles --create mongodb.conf
启动mongod服务:
LNX#> sudo systemctl start mongod.service
答案 6 :(得分:0)
我遇到了同样的问题,当我修改我的mongod.conf如下并解决了问题〜
port=27017
dbpath=/usr/local/mongodb/data/db/
logpath=/usr/local/mongodb/logs
fork = true
提示:logpath是日志文件而不是文件夹。
答案 7 :(得分:0)
我刚刚在ubuntu上遇到过类似的问题。几乎每个ERROR提示都遇到过,比如
child process failed, exited with error number 1
或child process failed, exited with error number 100
或[signalProcessingThread] got signal 2 (Interrupt: 2), will terminate after current cmd ends
我多次删除Mongodb并尝试重新安装,但问题仍然存在......
最后我是这样来的: 首先备份您的数据,然后使用
删除Mongodb#sudo apk-get autoremove mongodb-org
找出与mongodb相关的所有文件:
/#find -name mongo*
使用" rm"全部删除它们或" rmdir",包括/ var / cache / ...中的包和everthing。
然后在第一次重复安装时使用:
#echo "deb http://repo.mongodb.org/apt/ubuntu "$(lsb_release -sc)"/mongodb-org/3.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.0.list
#sudo apt-get update
#sudo apt-get install -y mongodb-org
它会再次运行。
答案 8 :(得分:0)
评论“mongo.conf”文件中的行。
<强> pidfilepath =的/ var /运行/ mongodb的/ mongod.pid 强>
答案 9 :(得分:0)
以下命令已解决%os
错误:
service mongod status
Error starting mongod. /var/run/mongodb/mongod.pid exists
固定人:
rm /var/lib/mongo/mongod.lock
chown -R mongod:mongod /var/log/mongodb/
chown -R mongod:mongod /var/run/mongodb/
chown -R mongod:mongod /var/lib/mongo/
chmod 777 /var/run/mongodb/mongod.pid
mongod --dbpath /var/lib/mongo
答案 10 :(得分:0)
这在Ubuntu中对我有用:
sudo kill $(sudo lsof -t -i:27017)
sudo rm -rf /tmp/mongodb-27017.sock
sudo rm -f /var/lib/mongo/mongod.lock
sudo rm -f /var/run/mongodb/mongod.pid
sudo mkdir -p /var/run/mongodb/
sudo touch /var/run/mongodb/mongod.pid
sudo chown -R mongodb:mongodb /var/run/mongodb/
sudo chown mongodb:mongodb /var/run/mongodb/mongod.pid
sudo service mongod start