启动 mongod fork,错误:子进程失败,以错误号 1 退出

Posted

技术标签:

【中文标题】启动 mongod fork,错误:子进程失败,以错误号 1 退出【英文标题】:Starting mongod fork, ERROR: child process failed, exited with error number 1 【发布时间】:2015-04-19 21:30:23 【问题描述】:

在尝试运行命令时

mongod --fork --logpath /var/log/mongodb.log

在 amazon ec2 32 位实例(Amazon Linux AMI 版本 2014.09)上,我遇到以下错误:

2015-02-18T18:14:09.007+0000 
2015-02-18T18:14:09.007+0000 warning: 32-bit servers don't have journaling    
enabled by default. Please use --journal if you want durability.
2015-02-18T18:14:09.007+0000 
about to fork child process, waiting until server is ready for connections.
forked process: 17116
ERROR: child process failed, exited with error number 1

我还注意到在此过程中没有创建日志文件。

【问题讨论】:

/data/db 存在吗?错误号 1:#define EPERM 1 /* Operation not permitted */。这也可以解释为什么没有创建日志文件 - 不允许用户创建。 确实如此,我也有一些我一直在使用的数据库文件。 @mnemosyn ls -al total 245772 drwxr-xr-x 2 ec2-user root 4096 Feb 5 17:14 . drwxr-xr-x 3 root root 4096 Feb 4 17:40 .. -rw------- 1 ec2-user ec2-user 67108864 Feb 5 21:42 brands.0 -rw------- 1 ec2-user ec2-user 16777216 Feb 5 21:42 brands.ns -rw------- 1 ec2-user ec2-user 67108864 Feb 4 22:54 brandsTest2.0 -rw------- 1 ec2-user ec2-user 16777216 Feb 4 22:54 brandsTest2.ns -rw------- 1 ec2-user ec2-user 67108864 Feb 18 17:52 local.0 -rw------- 1 ec2-user ec2-user 16777216 Feb 18 17:52 local.ns -rwxrwxr-x 1 ec2-user ec2-user 0 Feb 18 17:59 mongod.lock 嗯,那么我的猜测似乎是错误的。我仍然会调查 errno 1 路线... @mnemosyn 你在哪里找到错误代码?我在看https://github.com/mongodb/mongo/blob/master/docs/errors.md,但看不到。 【参考方案1】:

我有同样的事情,结果证明是权限问题。如果子进程的所有者无法访问日志路径或日志路径不存在,则会失败。

我所做的是将日志目录放在我的主目录中:

mkdir ~/log
mongod --fork --logpath ~/log/mongodb.log

如果你真的想把它放在你的 /var/log 目录中,只需更改权限即可。

【讨论】:

对于那些想知道的人,我不得不将 /var/log 上的权限更改为 777 @kabadisha 你真的不应该在 /var/log 上有 777 有很多潜在的敏感数据存储在该目录中。尝试将目录 perms 更改为 740 并首先创建日志文件。找到用户 mongod 正在运行并 chown 该文件。然后用 744 对文件进行 chmod。我只是在这里猜测,但几乎所有 perms 都比 /var/log 上的 777 好,祝你好运 这是一个好点。我必须将 /var/log 目录分配给我的用户,然后授予 740 权限。 这很有趣。我正把头撞到墙上。谢谢! 如何从 docker-compose 文件运行 mongod? @onetwopunch【参考方案2】:

我也遇到了同样的错误,但是我使用了 sudo 并运行了sudo mongod --fork --logpath /var/log/mongodb.log。正如@jryancanty 提到的,这只是一个权限错误。

【讨论】:

我仍然有这个问题,即使使用了“sudo” 使用 sudo 只是将错误编号从 1 更改为 100。【参考方案3】:

对于遇到此错误的任何其他人 [即使您使用 sudo 运行它],请确保您将日志文件的文件名声明为:/var/log/mongodb.log。我只有 /var/log/ 中的目录路径,因为我错过了阅读 mongo 文档。

【讨论】:

【参考方案4】:

我已经删除了旧的

/var/run/mongodb/mongod.pid

一切正常。

【讨论】:

我的无法运行,因为此文件丢失:(。说Cannot write pid file to /var/run/mongodb/mongod.pid: No such file or directory【参考方案5】:

之后我也有同样的问题

sudo rm /tmp/mongodb-27017.sock
sudo chown mongod:mongod /var/log/mongodb

一切正常。

【讨论】:

这为我解决了问题。只需更改目录的权限即可将我的错误消息从 1 更改为 100。我需要让 mongod 用户成为目录的所有者,并且它可以工作。 这对我也有用,因为尽管设置了正确的权限,但我还是有错误。【参考方案6】:

如果你有keyfile,也有可能是权限太开放了。确保将其设置为 0400

【讨论】:

【参考方案7】:

我错误地将日志路径设置为 var/mongodb/db/mongo.log 而不是 /var/mongodb/db/mongo.log,因此 Mongo 试图访问 /home 中不存在的文件夹。

【讨论】:

【参考方案8】:

如果您在日志文件中看到 /tmp/mongodb-27017.sock 的问题,这可能会起作用

sudo chown mongodb:mongodb /tmp/mongodb-27017.sock

【讨论】:

【参考方案9】:

sudo mongod --fork --logpath /var/log/mongodb.log

在 ubuntu 中无需更改 /var 中的权限,在 logpath 中使用完整的日志文件名

【讨论】:

【参考方案10】:

由于用户权限,我遇到了同样的问题,当我使用无权创建文件的用户登录 ubuntu 时,也会发生此错误。

所以,您必须使用 sudo 运行命令。 :)

【讨论】:

【参考方案11】:

从 EPEL repo (2.x) 中删除 mongo 并从 mongo repo (4.x) 安装 mongo 后,我遇到了同样的问题。

journalctl -xe 说:

ERROR: child process failed, exited with error number 1

在我的情况下,我有具有 root 权限的旧日志文件。 只需设置正确的权限或删除日志并检查日志目录权限即可。

【讨论】:

【参考方案12】:

如果您已经有用于存储 db 数据的 dbpath 文件夹并且在 conf 文件中为 dbpath 提供了新路径,也会生成此错误。当您为 dbpath、logs 和 PID 创建新文件夹时,请删除旧文件夹(如果它们存在)。

【讨论】:

以上是关于启动 mongod fork,错误:子进程失败,以错误号 1 退出的主要内容,如果未能解决你的问题,请参考以下文章

Linux进程控制

Linux进程控制

Linux进程控制

进程控制(Linux)

进程控制(Linux)

C Windows:生成子进程以停止和重新启动(超时后)父进程